2016-10-25 112 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