Python异常回溯告诉我哪些行结束,它从哪里开始?

时间:2008-11-14 21:31:11

标签: python exception

当跨越多行的代码抛出Python异常时,例如:

   myfoos = [foo("bar",
                "baz",
                "quux",
                 i) for i in range(10)]

Python将报告最后一行的行号,并将显示该行的代码片段:

Traceback (most recent call last):
  File "test.py", line 4, in <module>
    i) for i in range(10)]
NameError: name 'foo' is not defined

有没有办法确定第一行是什么?有没有办法捕获异常并操纵traceback对象,以便能够报告这样的事情:

Traceback (most recent call last):
 File "test.py", lines 1-4 in <module>
   myfoos = [foo("bar",
                "baz",
                "quux",
                 i) for i in range(10)]
 NameError: name 'foo' is not defined

2 个答案:

答案 0 :(得分:2)

找到该行的开头将非常困难。你必须要么解析Python,要么深入研究编译后的字节码。标准库中有用于解析Python的模块,但我可以从经验中告诉你,解释它们的输出是一种黑色艺术。而且我不确定编译的字节代码是否有答案......

答案 1 :(得分:0)

在try / except块中,除了NameError之外你可以尝试设置NameError.lineno,虽然我不确定它是否或如何工作,但它是我发现的最好的。

try:
    somecode
except NameError
    NameError.lineno = [1,4]

您必须弄清楚语句的开始和结束位置,以及哪种语句引发错误。

希望这有帮助