파이썬에서 예외(exception)는 프로그램 실행 중에 발생하는 오류를 의미한다. 이러한 예외가 발생하면 프로그램의 정상적인 흐름이 중단될 수 있다. 예외 처리는 이러한 예외 상황을 적절히 처리하여 프로그램이 중단되지 않고 계속 실행될 수 있도록 하는 방법이다.
예외 처리의 기본 구조
파이썬에서는 try, except, else, finally 키워드를 사용하여 예외를 처리할 수 있다. 기본 구조는 다음과 같다.
try:
# 예외가 발생할 수 있는 코드
except 예외타입 as 예외변수:
# 예외가 발생했을 때 실행할 코드
else:
# 예외가 발생하지 않았을 때 실행할 코드
finally:
# 예외 발생 여부와 상관없이 항상 실행할 코드
각 키워드의 역할은 다음과 같다:
try: 예외가 발생할 수 있는 코드를 작성한다.
except: 예외가 발생했을 때 실행할 코드를 작성한다. 특정 예외를 지정할 수도 있고, 지정하지 않을 수도 있다.
else: 예외가 발생하지 않았을 때 실행할 코드를 작성한다.
finally: 예외 발생 여부와 상관없이 항상 실행할 코드를 작성한다. 주로 자원 해제와 같은 정리 작업에 사용된다.
예제
다양한 예외 처리 예제를 통해 살펴보자.
예제 1: 기본 예외 처리
0으로 나누는 예외를 처리하는 예제이다.
try:
result = 10 / 0
except ZeroDivisionError as e:
print(f"예외가 발생했습니다: {e}")
이 코드는 ZeroDivisionError 예외가 발생했을 때 예외 메시지를 출력한다.
예제 2: 여러 개의 예외 처리
여러 개의 예외를 처리하는 예제이다.
try:
result = 10 / int("a")
except ZeroDivisionError as e:
print(f"0으로 나눌 수 없습니다: {e}")
except ValueError as e:
print(f"유효한 숫자가 아닙니다: {e}")
이 코드는 ValueError 예외가 발생했을 때 예외 메시지를 출력한다.
예제 3: else와 finally 사용
예외가 발생하지 않았을 때와 항상 실행되는 코드를 작성하는 예제이다.
try:
result = 10 / 2
except ZeroDivisionError as e:
print(f"예외가 발생했습니다: {e}")
else:
print(f"결과는 {result}입니다")
finally:
print("프로그램이 종료됩니다")
이 코드는 예외가 발생하지 않았을 때 결과를 출력하고, 예외 발생 여부와 상관없이 항상 종료 메시지를 출력한다.
예제 4: 사용자 정의 예외
사용자 정의 예외를 만들어 처리하는 예제이다.
class CustomError(Exception):
pass
try:
raise CustomError("사용자 정의 예외가 발생했습니다")
except CustomError as e:
print(e)
이 코드는 CustomError라는 사용자 정의 예외를 발생시키고, 이를 처리한다.
예외 처리의 장점
프로그램 안정성 향상: 예외 발생 시 적절히 처리하여 프로그램이 중단되지 않고 계속 실행될 수 있다.
디버깅 용이: 예외 메시지를 통해 오류의 원인을 쉽게 파악할 수 있다.
자원 관리: finally 블록을 통해 파일이나 네트워크 연결과 같은 자원을 적절히 해제할 수 있다.