2016-10-25 88 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。

+0

您希望使用'traceback.print_exc()'記錄哪種類型的異常?它會記錄除'KeyboardInterrupt'外的所有異常。 – ettanany

+0

是的。它應該處理所有我沒有在'exec_app()'中捕獲的異常。 – Rotareti

回答

5

從它__doc__

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