이 글에서는 Python 코드를 작성할 때 흔히 마주치는 TypeError—잘못된 자료형 간에 연산을 시도할 때 발생하는 예외의 정의와 주요 원인, 대표 사례, 해결 방법을 단계별 실습 예제와 함께 자세히 다룹니다. 다음 챕터인 ValueError: 값이 유효하지 않을 때 문제 예고로 마무리합니다.
1. TypeError란?
TypeError는 연산자(operator)나 함수(function)가 기대하는 자료형(type)과 다른 타입의 피연산자(operand)를 전달받았을 때 발생합니다. Python은 동적 타이핑 언어지만, 연산 시점에는 해당 객체가 지원하는 연산만 허용하기 때문에, 서로 호환되지 않는 타입 간 연산을 시도하면 예외가 발생합니다. 대표적인 경우로 문자열과 숫자 더하기, 리스트와 정수 곱셈 오용, 함수 호출에 잘못된 타입 인자 전달 등이 있습니다.
TypeError는 코드 실행 중에 즉시 표시되며, 메시지에 연산 대상과 기대 타입 정보가 포함되어 있어 문제 위치와 원인을 파악하는 데 도움을 줍니다.
2. 실습 예제
아래 코드를 실행하면 대표적인 TypeError 예시를 확인할 수 있습니다.
# 예제 1: 문자열과 숫자 더하기 오류
age = 30
message = "I am " + age + " years old"
# 예제 2: 리스트와 정수 곱셈 잘못된 사용
items = [1, 2, 3]
result = items * "2"
# 예제 3: 함수 인자 타입 오류
def repeat(text, times):
return text * times
output = repeat(5, "Hi") # 순서 및 타입 오류
3. 실행 결과 및 설명
위 코드를 실행하면 터미널에 다음과 유사한 에러 메시지가 출력됩니다:
TypeError: can only concatenate str (not "int") to str
TypeError: can't multiply sequence by non-int of type 'str'
TypeError: can't multiply sequence by non-int of type 'str'
첫 번째 에러는 문자열과 정수를 더하려 했고, 두 번째/세 번째 에러는 리스트(시퀀스)와 문자열을 곱하려 했기 때문에 발생합니다. 에러 메시지를 통해 “어떤 타입이 허용되고 어떤 타입이 전달되었는지”를 즉시 확인할 수 있습니다.
4. 해결 방법 & 디버깅 팁
- 자료형 확인: `type()` 함수로 변수의 타입을 출력하여 기대 타입과 일치하는지 점검합니다.
- 형 변환 사용: 필요 시 `str()`, `int()`, `float()` 등을 활용해 명시적으로 타입을 변환합니다.
- 함수 서명 검토: 함수 정의부에 기대 타입을 주석이나 타입 힌트(`def foo(x: str) -> str`)로 명시해 가독성을 높입니다.
- 테스트 추가: pytest나 unittest를 사용해 다양한 타입 조합에 대한 유닛 테스트를 작성합니다.
- IDE 린터 활용: PyCharm, VS Code의 타입 검사기(Pyright)를 통해 실시간으로 잠재적 타입 오류를 찾아냅니다.
5. 정리 및 다음 단계
이번 챕터에서는 TypeError의 발생 원인과 대표 사례, 해결 방법까지 살펴보았습니다. 자료형 불일치 문제는 대부분 형 변환과 명확한 타입 힌트를 통해 예방할 수 있으므로, 코드 작성 시 일관된 타입 관리를 습관화하세요. 다음 챕터에서는 ValueError: 값이 유효하지 않을 때 를 다룰 예정이니 많은 기대 부탁드립니다!
'08.개발&프로그래밍 > 1.파이썬' 카테고리의 다른 글
6. Python ZeroDivisionError(0으로 나누기) 완벽 가이드 (0) | 2025.07.18 |
---|---|
5. ValueError(값이 유효하지 않을 때) 완벽 가이드 (0) | 2025.07.15 |
3. Python NameError(정의되지 않은 이름 사용) 완벽 가이드 (0) | 2025.07.15 |
2. Python IndentationError(들여쓰기 문제) 완벽 가이드 (0) | 2025.07.15 |
문제 해결 - 1. Python SyntaxError(문법 에러) 완벽 가이드 (0) | 2025.07.15 |