2016-10-25 3 views
2

이 함수는 기본 실행에서 예외를 잡아야합니다. 예외가있는 경우 log.error(traceback.print_exc())과 함께 오류를 인쇄하고 exit_main()으로 정리해야합니다. 예외가 있다면파이썬 traceback.print_exc()는 '없음'을 반환합니다.

def main(): 
    try: 
     exec_app() 
    except KeyboardInterrupt: 
     log.error('Error: Backup aborted by user.') 
     exit_main() 
    except Exception: 
     log.error('Error: An Exception was thrown.') 
     log.error("-" * 60) 
     log.error(traceback.print_exc()) 
     log.error("-" * 60) 
     exit_main() 

불행하게도 log.error(traceback.print_exc())None를 반환 않습니다. 이 경우 추적 보고서에 전체 오류 보고서를 인쇄하려면 어떻게해야합니까?

추신 : 저는 python 3.4를 사용합니다. 그 __doc__에서

+0

어떤 유형의 예외가'traceback.print_exc()'로 기록 될 것으로 예상하십니까? 'KeyboardInterrupt'를 제외한 모든 예외를 기록합니다. – ettanany

+0

예. 그것은'exec_app()'안에서 잡히지 않은 모든 예외를 처리해야합니다. – Rotareti

답변

5

가 :

입니다
Shorthand for 'print_exception(sys.exc_type, sys.exc_value, sys.exc_traceback, limit, file)' 

, 아무것도 반환 안되고, 그 작업이 인쇄하는 것입니다. 추적 기록을 문자열로 기록하려면 대신 traceback.format_exc()을 사용하십시오.

1

나는 보통 디버깅 용으로 traceback.print_exc()을 사용합니다. 귀하의 예외를 기록하려면 다음을 수행하십시오 :

try: 
    # Your code that might raise exceptions 
except SomeSpecificException as e: 
    # Do something (log the exception, rollback, etc) 
except Exception as e: 
    log.error(e) # or log(e.message) if you want to log only the message and not all the error stack