이 튜토리얼에서는 Python의 try와 except에 대해 알아보겠습니다. Python에는 오류 및 예외 처리(error and exception handling)라는 개념이 있으며, 이때 try와 except 키워드가 사용됩니다.
Python의 두 가지 오류 유형
Python에서는 기본적으로 두 가지 유형의 오류를 만나게 됩니다.
- 구문 오류(Syntax errors) — Python이 프로그램 내 코드 라인을 이해하지 못할 때 발생하는 오류입니다.
- 예외 오류(Exception errors) — 프로그램 실행 중(런타임)에 감지되는 오류입니다. 예: ZeroDivisionError, ValueError 등
구문 오류는 사전에 막을 수 없지만, try-except를 사용하면 프로그램이 예외 오류를 만났을 때 이를 처리하고 적절히 대응할 수 있습니다.
자주 발생하는 Python 예외 오류
Python에서 가장 흔하게 접하는 예외 오류들은 다음과 같습니다.
- ZeroDivisionError — 숫자를 0으로 나누려고 할 때 발생합니다.
- ValueError — 함수에 부적절한 값을 전달했을 때 발생합니다.
- IndexError — 존재하지 않는 인덱스에 접근하려고 할 때 발생합니다.
- KeyError — 딕셔너리에 없는 키에 접근하려고 할 때 발생합니다.
- ImportError — 존재하지 않는 모듈을 임포트하려고 할 때 발생합니다.
- IOError — Python이 파일을 열 수 없을 때 발생합니다.
- KeyboardInterrupt — 사용자가 실행 중단 키(예: Ctrl+C)를 눌렀을 때 발생합니다.
Python에는 이 외에도 다양한 예외 오류가 있으며, try-except를 활용하면 손쉽게 처리할 수 있습니다.
try-except 기본 문법
# try-except 문법
try:
# 실행할 코드
# ...
except:
# 예외 발생 시 실행할 코드
# ...try-except 블록의 동작 방식
Python이 try-except 블록을 실행하는 과정은 다음과 같습니다.
- 먼저 Python은 try 블록 안의 코드를 실행합니다.
- 코드에서 예외 오류가 발생하지 않으면, except 블록은 실행되지 않습니다.
- 코드에서 예외 오류가 발생하면, try 블록의 나머지 코드는 건너뛰고 except 블록의 코드가 실행됩니다.
- 예외 오류가 발생했는데 except 블록이 해당 오류를 처리하지 못하면, 해당 예외 오류가 그대로 발생(raise)합니다.
- 하나의 try 블록에 여러 개의 except 문을 작성할 수도 있습니다.
예제 1: 예외가 발생하지 않는 경우
유효한 인덱스로 리스트 요소에 접근하는 예제입니다.
# 예외 오류 없음
try:
arr = [1, 2, 3, 4, 5]
# 유효한 인덱스로 배열 요소에 접근
two = arr[1]
print(f"오류 없이 정상 실행되었습니다 {two}")
except IndexError:
print("유효하지 않은 인덱스입니다")실행 결과
오류 없이 정상 실행되었습니다 2
예외 오류가 발생하지 않았기 때문에 try 블록의 코드가 그대로 실행되었습니다.
예제 2: 유효하지 않은 인덱스에 접근하는 경우
이번에는 존재하지 않는 인덱스에 접근해 보겠습니다.
# 잘못된 인덱스 접근
try:
arr = [1, 2, 3, 4, 5]
# 유효하지 않은 인덱스로 배열 요소에 접근
six = arr[6]
print(f"오류 없이 정상 실행되었습니다 {six}")
except IndexError:
print("유효하지 않은 인덱스입니다")실행 결과
유효하지 않은 인덱스입니다
try 블록에서 IndexError가 발생했기 때문에, except 블록의 코드가 대신 실행되었습니다.
예제 3: except가 예외를 처리하지 못하는 경우
만약 except 블록이 발생한 예외를 처리하지 못하면 어떻게 될까요?
# except가 예외를 처리하지 못하는 경우
try:
arr = [1, 2, 3, 4, 5]
# 유효하지 않은 인덱스로 배열 요소에 접근
six = arr[6]
print(f"오류 없이 정상 실행되었습니다 {six}")
except ValueError:
print("유효하지 않은 인덱스입니다")실행 결과
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-11-fe3737d0615b> in <module>
3 arr = [1, 2, 3, 4, 5]
4 # 유효하지 않은 인덱스로 배열 요소에 접근
----> 5 six = arr[6]
6 print(f"오류 없이 정상 실행되었습니다 {six}")
7 except ValueError:
IndexError: list index out of range실제로 발생한 오류는 IndexError인데, except 블록에는 ValueError만 지정되어 있어 이를 처리하지 못했습니다. 그 결과 프로그램은 오류와 함께 중단됩니다. 따라서 except 블록에 예외 유형을 지정할 때는 실제로 발생할 수 있는 예외를 정확히 명시하는 것이 매우 중요합니다.
마무리
지금까지 Python의 try-except를 활용한 예외 처리 방법을 살펴보았습니다. 구문 오류는 코드 작성 단계에서 수정해야 하지만, 예외 오류는 try-except를 통해 프로그램이 비정상적으로 종료되지 않도록 우아하게 처리할 수 있습니다. 튜토리얼에 대해 궁금한 점이 있다면 댓글로 남겨주세요.