파이썬에서는 프로그램 실행 중 발생하는 오류(예외) 메시지를 여러 가지 방식으로 캡처하고 출력할 수 있습니다. 이 글에서는 두 가지 대표적인 방법을 코드 예제와 함께 살펴보고, 최신 파이썬 3 환경에서의 권장 방식까지 함께 안내합니다.
1. 예외 객체의 message 속성 사용하기
첫 번째 방법은 except 블록에서 전달받은 예외 객체(e)의 message 속성을 그대로 출력하는 것입니다.
예제
try:
a = 7/0
print float(a)
except BaseException as e:
print e.message
출력 결과
integer division or modulo by zero
위 코드에서는 숫자를 0으로 나누려다 ZeroDivisionError가 발생하고, except 블록이 이 예외를 잡아 "integer division or modulo by zero"라는 메시지를 화면에 출력합니다.
2. sys 모듈의 exc_value 속성 사용하기
두 번째 방법은 sys 모듈을 임포트한 뒤, sys.exc_value 속성을 통해 현재 처리 중인 예외의 값을 가져오는 방식입니다.
예제
import sys
def catchEverything():
try:
a = 'sequel'
b = 0.8
print a + b
except Exception as e:
print sys.exc_value
catchEverything()
출력 결과
cannot concatenate 'str' and 'float' objects
이 예제에서는 문자열(str)과 실수(float)를 더하려다 TypeError가 발생하며, catchEverything() 함수 내부의 except 블록이 해당 예외를 잡아 에러 메시지를 출력합니다.
참고: 파이썬 3에서의 예외 메시지 출력
위 예제들은 파이썬 2 기준으로 작성된 코드입니다. 파이썬 3에서는 e.message나 sys.exc_value가 더 이상 지원되지 않으므로, 내장 함수인 str() 또는 repr()을 사용하는 것이 표준적인 방법입니다.
try:
a = 7 / 0
except Exception as e:
print(str(e)) # division by zero
print(repr(e)) # ZeroDivisionError('division by zero')
또한 traceback 모듈을 활용하면 스택 트레이스 전체를 출력할 수 있어, 원인 분석과 디버깅에 큰 도움이 됩니다. 상황에 맞는 방법을 선택해 예외 메시지를 효과적으로 관리해 보세요.