Python回溯,即使不显示完整的回溯,也显示发生错误的行

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)

Pav*_*sov 6

你可以这样做:

\n\n
import 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\n
import 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\n
\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\n\n
\n

给定 extract_tb() 或 extract_stack() 返回的元组列表,返回准备打印的字符串列表。结果列表中的每个字符串对应于参数列表中具有相同索引的项目。每个字符串以换行符结尾;对于那些源文本行不是 None 的项目,字符串也可能包含内部换行符。

\n
\n