假设我在Python中有一个多行引发异常。
Python如何决定引发异常的哪一行?
示例:(注意:我可以在每行后使用反斜杠\
)
(1
+0/0
+3)
第3行(ZeroDivisionError
处的+3)
例外)引发例外。
(1
+
0/0
)
在第3行上引发例外。
(0/0
+
1)
在第2行上引发例外。
这个问题的灵感来自this example和@Godman pointed out,异常不会发生在最后一行(正如我之前所想的那样)。
答案 0 :(得分:1)
例外情况将指向包含的行*:
最后一个运算符(如果以前的文字/运算符导致异常)。
最后一个文字(否则即最后一个文字/运算符导致异常)。
然而,如果这不是您看到的行为,那么可能可能是由于您的某个py(源)文件与其相应的(已编译)之间的差异造成的)pyc文件,或运行代码(在内存中)。以下是一个说明性的例子。
假设E.py
包含:
def z():
0/0
从python命令行import E
(这会将E.py
编译成字节码:E.pyc
,然后放入内存中。
在E.z()
的第2行调用z
,这将产生异常,显示行0/0
- 这里不足为奇。
返回E.py
源文件,在顶部插入两行,在第二个插入字符串"oh dear, oh dear"
。
返回python命令行,再次拨打E.z()
。
例外(第2行,z 中的)现在显示"oh dear, oh dear"
。
*更新:我没有这方面的参考,如果您遇到一个,请评论一个。 我以前认为这只是最后一行!