如何在函数中获取python异常回溯

时间:2016-11-02 12:31:57

标签: python python-3.x error-handling

我有一个应该处理所有错误的函数:

def err(e):
    import traceback
    message = traceback.print_exc()
    print(message)

if __name__ == "__main__":
    try:
        1/0 # just sample
    except Exception as e:
        err(e)

但它会返回一个简短的错误:

integer division or modulo by zero

但我需要更多细节(traceback)来检查错误。

2 个答案:

答案 0 :(得分:1)

您已将异常传递给您的函数,因此为什么要使用traceback,您已在其中e;如果你需要回溯,只需抓住e.__traceback__

import traceback

def err(e):   
    tb = e.__traceback__
    # print traceback
    traceback.print_tb(tb)

对于不依赖于dunders的选项,您可以使用sys.exc_info并保留回溯:

import traceback, sys

def err(e):
    *_, tb = sys.exc_info()    
    # print traceback
    traceback.print_tb(tb)

答案 1 :(得分:0)

根据python文档:

  

traceback.print_exc([limit [,file]])

This is a shorthand for print_exception(sys.exc_type, sys.exc_value, sys.exc_traceback, limit, file). (In fact, it uses
     

sys.exc_info()以线程安全的方式检索相同的信息   而不是使用已弃用的变量。)

您实际上只是打印出1/0产生的错误消息

如果您要打印出个性化的错误消息,您可以执行以下操作:

if __name__ == "__main__":
    try:
        1/0 # just sample
    except Exception as e:
        print 'This is the error I am expecting'