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

Python回溯,显示发生错误的行,即使不显示完整的回溯,python,error-handling,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

如何确保打印出失败的实际行而不包括整个回溯?回溯对我来说可能太长了太多打印出来了

这段代码只打印函数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()

您可以这样做:

import sys
import traceback

def a():
    try:
        return b();
    except:
        _, _, tb = sys.exc_info()
        print traceback.format_list(traceback.extract_tb(tb)[-1:])[-1]
或根据自己的喜好格式化字符串:

import sys
import traceback

def a():
    try:
        return b();
    except:
        _, _, tb = sys.exc_info()
        filename, lineno, funname, line = traceback.extract_tb(tb)[-1]
        print '{}:{}, in {}\n    {}'.format(filename, lineno, funname, line)

此函数返回三个值的元组,这些值提供有关当前正在处理的异常的信息(…) 如果堆栈上的任何位置都没有处理异常,则返回一个包含三个None值的元组。否则,返回的值为(类型、值、回溯)

返回从回溯对象回溯中提取的最多限“预处理”堆栈跟踪项的列表。它对于堆栈跟踪的备用格式非常有用。如果省略限制或无限制,则提取所有条目。“预处理”堆栈跟踪条目是四重(文件名、行号、函数名、文本),表示通常为堆栈跟踪打印的信息。文本是一个带前导和尾随空格的字符串;如果源不可用,则为“无”

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


只需使用
traceback.format_exc()
而不是
traceback.format_exc(2)
。所采用的参数是要格式化的条目数的限制。如果你不写,它们都是格式化的

请注意,
print traceback.format\u exc()
也可以简单地写为
traceback.print\u exc()

如果您只想显示回溯:

print(traceback.format_exc())
error_type, error, tb = sys.exc_info()
filename, lineno, func_name, line = traceback.extract_tb(tb)[-1]
如果要从回溯中提取函数名称、行编号、错误描述等值:

print(traceback.format_exc())
error_type, error, tb = sys.exc_info()
filename, lineno, func_name, line = traceback.extract_tb(tb)[-1]