2011년 2월 16일 수요일

[Python] Log Detailed Exception

자세한 Exception 출력하기가 필요한걸까?

내 경우 에러를 로그로 확인해야 하는 심각한 처지에 있었기에 자세한 exception은 로그로 저장해 둬야 한다. 물론 Exception이 발생했다고 프로그램을 종료시켜서도 안된다. 그러니 자세한 예외 내용을 알아야 할 때도 있었다.

뭐 보통은 exception 처리를 이렇게 할 거다.
try:
  ... blah ...
except SomeException:
  ... exception blah ...
except Exception, e:
  print e

예외 종류가 너무 많고 귀찮을 때(!!) 저런 식으로 모든 예외의 어머니겪인 Exception을 받아서 출력해 버리는 방법.

근데 이거 단점은, try 내부에 exception을 발생시키는 요소가 많다면 어디서 이런 exception이 발생했는지 파악하는게 가끔(?) 어려울 수도 있다는 점이다.

이럴 때를 위해서 피똥신(-_-)께서는 sys 모듈에 exc_info() 라는 함수를 내려주셨다.
import sys

...

try:
  ...
except:
  print exc_info()

근데 이거 튜플형 자료가 표시된다. 즉, 리턴되는 내용을 좀 나눠서 알아서 재가공하라는 의미다.

(추가 정리) 좀 더 편한 방법은

import traceback

...

try:
  ...
except:
  print traceback.format_exc()

가 있다.

댓글 3개 :

allieus :
작성자가 댓글을 삭제했습니다.
allieus :

import traceback

try:
1/0
except:
print traceback.format_exc()

이 코드도 쓸만.

blogspot.com 에 처음 댓글 달아보는데, 어렵군 -_-;;;

Seorenn :

오 저것도 buffer로 넘겨주는 녀석이었군. 좋아좋아...