2016-10-25 16 views
2

この関数は、メイン実行時に例外を捕捉することになっています。例外がある場合は、log.error(traceback.print_exc())でエラーを出力し、exit_main()でクリーンアップする必要があります。例外がある場合Python traceback.print_exc()は 'None'を返します

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を返すん。この場合、完全なエラーレポートをトレースバックに出力するにはどうすればよいですか?

PS:私は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 
関連する問題