2010-12-07 8 views
5

파이썬의 except 절에 의해 던진 예외를 어떻게 처리합니까? 예외의 파이썬 예외

def safeLoopingCall(self, *args, **kwargs): 
    try: 
     self.loopingCall(*args, **kwargs) 
    except: 
     self.log.exception("exception in task") 

예외가 로거에 발생하면

, 우리는 밖으로있어. 이를 피하는 가장 좋은 방법은 무엇입니까? 다른 try-except 블록을 제외하고는 서라운드를합니까 (끔찍한 소리가 들립니까?)? 이 함수는 예외를 전파하지 않습니다. 이 프로그래밍 오류를 마스크 수 일반적으로

+2

어떤 로거를 사용하십니까? http://docs.python.org/library/logging.html#exceptions-raised-during-logging – aeter

+1

사실 : 기본 '로그'모듈을 기록하는 동안 발생 한 예외를 삼킨다. 예외를 삼키려면 logging.raiseExceptions = 0을 지정해야합니다. 이 경우에 효과가 있습니다. 감사! – Tommy

답변

5

포괄 제외하고 블록을 가지고 좋은 디자인이 아니다. IMHO 이것이 조금 끔찍한 이유입니다.

당신이 정말로 다음 네, 절을 제외하고 내부에 중첩 된 시도를 넣어 무엇을, graciouslly 상관없이 실패하지하려면

-하지만 전체 역 추적을 기록, 그렇지 않으면 디버깅 정말 열심히 얻을 수 있습니다.

0

FWIW, 내 CausedException class을 볼 수있다. 아마이 경우에 도움이 될 수 있습니다. 당신은 이유 등 두와 CausedException를 제기해야 다음 두 예외를 포착 CausedException로 포장해야하고 것입니다. 이렇게하면 관련된 모든 스택 추적을 디버그 메시지에서 사용할 수 있습니다.