일반적인 예외 인식하기
이 단계에서는 일반적인 예외 (exceptions) 를 살펴봅니다. 구문 오류와 달리 예외는 프로그램 실행 중에 발생합니다. 코드는 구문적으로는 올바르지만, 실행되는 동안 오류가 발생하는 경우입니다.
파일 common_exceptions.py가 ~/project 디렉토리에 준비되어 있습니다.
먼저, ZeroDivisionError를 발생시켜 보겠습니다. 편집기에서 common_exceptions.py를 열고 다음 코드를 추가합니다.
numerator = 10
denominator = 0
result = numerator / denominator
print(result)
파일을 저장하고 터미널에서 실행합니다.
python common_exceptions.py
프로그램이 실행을 시작하지만 중단되고 ZeroDivisionError가 표시됩니다. 수학적으로 0 으로 나누는 것은 정의되지 않으며, Python 은 이 문제를 나타내기 위해 이 예외를 발생시킵니다.
Traceback (most recent call last):
File "/home/labex/project/common_exceptions.py", line 3, in <module>
result = numerator / denominator
ZeroDivisionError: division by zero
다음으로, NameError를 유발해 보겠습니다. 이는 아직 정의되지 않은 변수를 사용하려고 할 때 발생합니다. common_exceptions.py의 내용을 다음으로 바꿉니다.
print(undefined_variable)
파일을 저장하고 실행합니다.
python common_exceptions.py
인터프리터가 undefined_variable이 무엇을 참조하는지 모르기 때문에 NameError가 발생합니다.
Traceback (most recent call last):
File "/home/labex/project/common_exceptions.py", line 1, in <module>
print(undefined_variable)
NameError: name 'undefined_variable' is not defined
이제 TypeError를 살펴보겠습니다. 이는 부적절한 유형의 객체에 대해 연산을 시도할 때 발생합니다. common_exceptions.py의 내용을 이 코드로 바꿉니다.
print("Hello" + 5)
스크립트를 저장하고 실행합니다.
python common_exceptions.py
TypeError가 표시됩니다. Python 은 문자열과 정수를 직접 더하는 (+) 것을 허용하지 않습니다.
Traceback (most recent call last):
File "/home/labex/project/common_exceptions.py", line 1, in <module>
print("Hello" + 5)
TypeError: can only concatenate str (not "int") to str
마지막으로, IndexError를 시연해 보겠습니다. 이는 시퀀스 (예: 리스트) 의 요소를 범위를 벗어난 인덱스를 사용하여 액세스하려고 할 때 발생합니다. common_exceptions.py의 내용을 다음으로 바꿉니다.
my_list = [1, 2, 3]
print(my_list[5])
스크립트를 저장하고 실행합니다.
python common_exceptions.py
IndexError가 발생합니다. 리스트 my_list에는 세 개의 항목이 있으므로 유효한 인덱스는 0, 1, 2 입니다. 인덱스 5 에 액세스하는 것은 불가능합니다.
Traceback (most recent call last):
File "/home/labex/project/common_exceptions.py", line 2, in <module>
print(my_list[5])
IndexError: list index out of range
이러한 일반적인 예외를 이해하는 것은 Python 코드 디버깅을 배우는 핵심적인 부분입니다.