Python에서 여러 예외를 함께 처리하기
Python에서는 하나의 except 절에 여러 개의 예외를 동시에 정의할 수 있습니다. 이렇게 하면 인터프리터가 해당 예외 중 하나라도 일치하는 것을 발견했을 때, except 절 아래에 작성된 코드가 실행됩니다.
즉, 서로 다른 종류의 예외가 발생하더라도 동일한 처리 로직으로 한꺼번에 대응하고 싶을 때 유용하게 사용할 수 있습니다.
기본 문법
여러 예외를 지정하는 일반적인 문법은 다음과 같습니다. 각 예외는 튜플 형태로 쉼표(,)로 구분하여 나열합니다.
except (Exception1, Exception2, ..., ExceptionN) as e:
이런 방식으로 except 절을 정의하면, 동일한 코드 블록에서 서로 다른 예외가 발생할 수 있다고 가정하고, 각 경우에 대해 공통된 조치를 취하겠다는 의미가 됩니다.
예제 코드
아래 예제는 정수와 문자열을 더하려고 시도하여 TypeError가 발생하는 상황입니다. except 절에서 TypeError와 SyntaxError 두 가지 예외를 함께 처리하고 있습니다.
import sys
try:
d = 8
d = d + '5'
except (TypeError, SyntaxError) as e:
print(sys.exc_info())
실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
(<class 'TypeError'>, TypeError("unsupported operand type(s) for +: 'int' and 'str'"), <traceback object at 0x0000000002954748>)결과 해석
sys.exc_info()는 현재 처리 중인 예외에 대한 정보를 튜플 형태로 반환합니다. 반환되는 튜플은 다음 세 가지 요소로 구성됩니다.
- 예외 클래스: 발생한 예외의 타입 (예: TypeError)
- 예외 인스턴스: 실제 에러 메시지를 담고 있는 객체
- 트레이스백 객체: 예외가 발생한 코드의 호출 스택 정보
참고로 위 예제는 Python 2 스타일의 print 문법을 사용했지만, Python 3에서는 print() 함수 형태로 작성해야 합니다. 또한 예외 객체를 e로 받았다면 print(e)를 통해 에러 메시지를 더 간단히 확인할 수도 있습니다.