파이썬에서 TypeError란 무엇인가?
파이썬을 사용하다 보면 흔하게 접하는 오류 중 하나가 바로 TypeError입니다. 그중에서도 자주 발생하는 형태는 다음과 같습니다:
TypeError: unsupported operand type(s) for +: 'int' and 'str'
이 오류는 서로 호환되지 않는 타입 간에 연산자(+, -, *, / 등)를 사용했을 때 발생합니다. 특히 정수(int)와 문자열(str), 리스트(list)와 숫자처럼 다른 타입을 섞어서 사용할 때 자주 나타납니다.
오류 메시지를 정확히 이해하기
에러 메시지에서 핵심은 unsupported operand type(s)
입니다. 이는 두 개 이상의 피연산자 타입이 해당 연산에 적합하지 않다는 의미입니다.
TypeError: unsupported operand type(s) for -: 'list' and 'int'
위 메시지는 리스트와 정수 사이에서 빼기(-
) 연산을 시도했지만, 리스트 타입은 빼기 연산을 지원하지 않기 때문에 오류가 발생한 경우입니다.
주요 발생 사례와 해결법
1. 문자열과 숫자 혼합
age = 25
message = "당신의 나이는 " + age + "살입니다."
위 코드는 int와 str을 + 연산자로 연결하려 해서 오류가 납니다.
해결법:
message = "당신의 나이는 " + str(age) + "살입니다."
또는 f-string
을 활용하면 더 깔끔합니다:
message = f"당신의 나이는 {age}살입니다."
2. 리스트와 숫자 연산
my_list = [1, 2, 3]
result = my_list - 2
이 코드는 TypeError: unsupported operand type(s) for -: 'list' and 'int' 오류를 발생시킵니다.
해결법: 리스트에 있는 각 요소에 연산을 적용하려면 리스트 컴프리헨션을 사용하세요.
result = [x - 2 for x in my_list]
3. None과 숫자 연산
value = None
total = value + 10
None
은 숫자가 아니므로 연산이 불가능하며, TypeError가 발생합니다.
해결법: None 값을 사전에 체크하거나 기본값을 할당합니다.
if value is None:
value = 0
total = value + 10
문제 해결을 위한 디버깅 팁
- type() 함수를 사용하여 변수의 타입을 확인하세요.
- 연산 대상의 타입이 같거나 호환 가능한지 항상 확인합니다.
- IDE(예: PyCharm, VS Code)에서 실시간 타입 검사 기능을 활용하세요.
a = "10"
b = 5
print(type(a), type(b)) # str, int
실전 예제: 사용자 입력 처리 시 주의점
사용자 입력은 항상 문자열(str)로 처리됩니다.
num1 = input("숫자 입력: ")
print(num1 + 10) # 오류 발생
이 코드는 문자열과 정수의 덧셈을 시도하기 때문에 오류가 발생합니다.
해결법:
num1 = int(input("숫자 입력: "))
print(num1 + 10)
모범 사례: 연산 전 타입 명확히 하기
- 항상 연산 전에 타입을 명확하게 정의하고, 문자열은 필요한 경우 명시적으로
int()
또는str()
로 변환하세요. - 타입 힌트(type hint)를 사용하면 가독성과 디버깅이 쉬워집니다.
def add_numbers(a: int, b: int) -> int:
return a + b
정리: TypeError는 타입 불일치의 신호입니다
TypeError: unsupported operand type(s) 오류는 연산 대상의 타입이 맞지 않다는 명확한 신호입니다. 대부분의 경우는 문자열과 숫자, 리스트와 숫자, None 타입 등이 원인입니다.
이런 오류를 예방하려면 type() 함수를 적극 활용하고, 연산 전에 타입을 일치시키는 습관이 중요합니다. 오늘 배운 내용을 바탕으로 파이썬 연산 오류 없이 깔끔한 코드를 작성해보세요!