use*_*003 6 python error-handling
如何确保打印出失败的实际行而不包含整个回溯?回溯对我来说可能太长了,我也要把它全部打印出来。
这段代码只打印函数a和b中的错误,但我想看到实际的错误发生在函数d中。
import traceback
def a():
try:
return b();
except:
print traceback.format_exc(2)
def b():
return c();
def c():
return d();
def d():
x = 1/0
a()
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
\n\nimport sys\nimport traceback\n\ndef a():\n try:\n return b();\n except:\n _, _, tb = sys.exc_info()\n print traceback.format_list(traceback.extract_tb(tb)[-1:])[-1]\n
Run Code Online (Sandbox Code Playgroud)\n\n或者根据需要自行格式化字符串:
\n\nimport sys\nimport traceback\n\ndef a():\n try:\n return b();\n except:\n _, _, tb = sys.exc_info()\n filename, lineno, funname, line = traceback.extract_tb(tb)[-1]\n print \'{}:{}, in {}\\n {}\'.format(filename, lineno, funname, line)\n
Run Code Online (Sandbox Code Playgroud)\n\nsys.exc_info()
\n\n\n\n\n此函数返回一个包含三个值的元组,这些值提供有关当前正在处理的异常的信息 (...)\n 如果堆栈上的任何位置都没有处理任何异常,则返回包含三个 None 值的元组。否则,返回的值为(类型、值、回溯)。
\n
\n\n\n\n\n返回从回溯对象回溯中提取的最多限制 \xe2\x80\x9cpre-processed\xe2\x80\x9d 堆栈跟踪条目的列表。它对于堆栈跟踪的替代格式很有用。如果省略 limit 或 None,则提取所有条目。\xe2\x80\x9cpre-processed\xe2\x80\x9d 堆栈跟踪条目是一个四元组(文件名、行号、函数名、文本),表示通常为堆栈跟踪打印的信息。文本是一个去除了前导和尾随空格的字符串;如果源不可用,则为“无”。
\n
\n\n给定 extract_tb() 或 extract_stack() 返回的元组列表,返回准备打印的字符串列表。结果列表中的每个字符串对应于参数列表中具有相同索引的项目。每个字符串以换行符结尾;对于那些源文本行不是 None 的项目,字符串也可能包含内部换行符。
\n
归档时间: |
|
查看次数: |
5277 次 |
最近记录: |