我有一个应该处理所有错误的函数:
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
)来检查错误。
答案 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'