【问题标题】:Python traceback.print_exc() returns 'None'Python traceback.print_exc() 返回“无”
【发布时间】:2016-10-25 12:38:17
【问题描述】:

这个函数应该在主执行中捕获异常。如果出现异常,它应该使用log.error(traceback.print_exc()) 打印出错误并使用exit_main() 进行清理。

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。在这种情况下,如何让 traceback 打印完整的错误报告?

PS:我使用 python 3.4。

【问题讨论】:

  • 您希望使用traceback.print_exc() 记录哪种类型的异常?它会记录除KeyboardInterrupt 之外的所有异常
  • 是的。它应该处理我在exec_app() 中没有发现的所有异常。

标签: python exception-handling traceback


【解决方案1】:

来自其__doc__

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

也就是说,它不应该返回任何东西,它的工作是打印。如果您希望将回溯作为字符串记录,请改用traceback.format_exc()

【讨论】:

    【解决方案2】:

    我通常使用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-03
      • 1970-01-01
      • 1970-01-01
      • 2018-04-06
      • 2014-02-23
      • 2013-07-27
      • 2018-07-19
      相关资源
      最近更新 更多