获取错误行号Python

时间:2016-04-29 13:10:09

标签: python-2.7 python-3.x

我正在尝试调试python代码,我想指出发生错误的行号。根据找到的帖子asked here,代码给出了被调用函数的行号。例如

    if __name__ == '__main__':
        try:
            foo()
        except:
            <the code to print line no when error occurs>

但它给了我foo()的行号, 请帮助找出发生错误的确切行号。

谢谢,

1 个答案:

答案 0 :(得分:2)

您必须使用sys.exc_info()的第三个返回值,它们在您的示例中调用exc_tb。您可以使用traceback.extract_tb(exc_tb)浏览回溯对象,而不是使用exc_tb.tb_lineno。 repr看起来像:

*** extract_tb:
[('<doctest...>', 10, '<module>', 'lumberjack()'),
 ('<doctest...>', 4, 'lumberjack', 'bright_side_of_death()'),
 ('<doctest...>', 7, 'bright_side_of_death', 'return tuple()[0]')]

我认为你要寻找的线是结构的最后一行。我没有经过测试,但应该这样做:

import sys, os, traceback

try:
    raise NotImplementedError("No error")
except Exception as e:
    exc_type, exc_obj, exc_tb = sys.exc_info()
    tb = traceback.extract_tb(exc_tb)[-1]
    print(exc_type, tb[2], tb[1])