Python异常回溯告诉我行结束在哪,开始在哪?
当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
在一个try/except代码块里,你可以捕捉到NameError这个错误,然后尝试设置NameError.lineno,虽然我不太确定这是否有效或者具体怎么做,但这是我目前找到的最好方法。
try:
somecode
except NameError
NameError.lineno = [1,4]
你还得自己想办法找出这个语句是从哪里开始和结束的,以及哪个语句引发了这个错误。
希望这对你有帮助。
3
要找到行的开头其实挺难的。你要么得解析Python代码,要么就得研究一下编译后的字节码。标准库里有一些模块可以用来解析Python代码,但我可以告诉你,从经验来看,理解它们的输出就像是一门黑暗的艺术。而且我也不确定编译后的字节码是否能给出答案……