서론
TypeError: unsupported operand type(s) for +: '...' and '...'
는 새로운 Python 프로그래머들이 가장 흔하게 접하는 오류 중 하나입니다. 이 오류는 덧셈 연산자(+
)를 호환되지 않는 타입의 두 객체에 사용하려고 할 때 발생합니다. 예를 들어, 숫자와 문자열 또는 리스트와 딕셔너리를 직접 더할 수 없습니다.
이 가이드에서는 이 TypeError
가 발생하는 이유를 설명하고, 다양한 데이터 타입을 올바르게 처리하기 위한 명확한 해결책을 제공합니다.
이 TypeError
의 원인은 무엇인가요?
Python은 강력한 타입 언어로, 대부분의 연산에서 데이터 타입을 자동으로 변환하지 않습니다. +
연산자는 피연산자의 타입에 따라 다르게 동작합니다.
- 숫자(int, float)의 경우: 수학적 덧셈을 수행합니다.
- 문자열의 경우: 연결(concatenation)을 수행합니다.
- 리스트의 경우: 연결을 수행합니다.
- 튜플의 경우: 연결을 수행합니다.
오류는 +
연산자에 대해 정의된 동작이 없는 타입을 혼합할 때 발생합니다.
오류를 발생시키는 일반적인 예:
- 문자열과 정수 더하기:
age = 25 message = "My age is " + age # TypeError 발생 # TypeError: can only concatenate str (not "int") to str
- 리스트와 문자열 더하기:
my_list = [1, 2, 3] my_string = "456" result = my_list + my_string # TypeError 발생 # TypeError: can only concatenate list (not "str") to list
- 딕셔너리와 리스트 더하기:
my_dict = {'a': 1} my_list = ['b', 2] result = my_dict + my_list # TypeError 발생 # TypeError: unsupported operand type(s) for +: 'dict' and 'list'
오류 해결 방법
해결책은 항상 +
연산자를 사용하기 전에 피연산자가 호환되는 타입인지 확인하는 것입니다. 이는 보통 명시적인 타입 변환을 포함합니다.
1. 문자열 연결을 위한 변환
문자열을 숫자나 다른 객체와 결합하여 표시하려는 경우, str()
을 사용하여 문자열이 아닌 객체를 문자열로 변환하세요.
잘못된 코드:
age = 25
message = "I am " + age + " years old."
올바른 코드:
age = 25
# 정수 'age'를 문자열로 변환
message = "I am " + str(age) + " years old."
print(message) # 출력: I am 25 years old.
문자열을 포맷하는 더 현대적이고 가독성 좋은 방법은 f-string(포맷된 문자열 리터럴)을 사용하는 것입니다. 이는 변환을 자동으로 처리합니다.
모범 사례 (f-string):
age = 25
message = f"I am {age} years old."
print(message) # 출력: I am 25 years old.
2. 덧셈을 위한 숫자 변환
사용자 입력이나 파일로부터 숫자 데이터를 문자열로 받은 경우, 산술 연산을 수행하기 전에 숫자 타입(int
또는 float
)으로 변환해야 합니다.
잘못된 코드:
num1_str = "10"
num2_int = 20
result = num1_str + num2_int # TypeError 발생
올바른 코드:
num1_str = "10"
num2_int = 20
# 문자열 'num1_str'을 정수로 변환
result = int(num1_str) + num2_int
print(result) # 출력: 30
문자열이 유효한 숫자가 아닐 경우 발생할 수 있는 ValueError
를 처리해야 합니다.
num_str = "hello"
try:
num_int = int(num_str)
except ValueError:
print(f"'{num_str}'는 정수로 변환할 수 없습니다.")
3. 다른 데이터 타입 처리
리스트나 딕셔너리와 같은 다른 데이터 타입으로 작업할 때, “덧셈”이 컨텍스트에서 무엇을 의미하는지 생각해야 합니다.
-
리스트에 항목 추가:
append()
메서드나 다른 리스트와의 리스트 연결을 사용합니다.my_list = [1, 2, 3] item_to_add = 4 # 단일 항목 추가 my_list.append(item_to_add) print(my_list) # 출력: [1, 2, 3, 4] # 다른 리스트와 연결 another_list = [5, 6] combined_list = my_list + another_list print(combined_list) # 출력: [1, 2, 3, 4, 5, 6]
-
딕셔너리에 “추가”: 이는 보통 새로운 키-값 쌍으로 업데이트하는 것을 의미합니다.
update()
메서드나 직접 할당을 사용합니다.my_dict = {'a': 1} # 새로운 키-값 쌍 추가 my_dict['b'] = 2 # 다른 딕셔너리로 업데이트 another_dict = {'c': 3, 'd': 4} my_dict.update(another_dict) print(my_dict) # 출력: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
결론
TypeError: unsupported operand type(s) for +
는 데이터 타입의 중요성을 강조하는 Python의 근본적인 오류입니다. 이를 해결하려면 명시적인 타입 변환을 수행하여 +
연산자를 호환되는 타입에만 사용하도록 해야 합니다. 문자열 연결에는 str()
, 수학적 덧셈에는 int()
또는 float()
, 다른 자료 구조에는 append()
나 update()
와 같은 적절한 메서드를 사용하세요. 문자열 포맷팅에 f-string을 채택하면 더 깨끗하고 오류 없는 코드를 작성하는 데 도움이 될 것입니다.
Leave a comment