选择在异常中报告哪一行

时间:2012-08-16 16:37:52

标签: python exception

假设我在Python中有一个多行引发异常。

Python如何决定引发异常的哪一行?

示例:(注意:我可以在每行后使用反斜杠\

(1
 +0/0
 +3)

第3行ZeroDivisionError处的+3)例外)引发例外。

(1
 +
 0/0
 )

第3行上引发例外。

(0/0
 +
 1)

第2行上引发例外。

这个问题的灵感来自this example和@Godman pointed out,异常不会发生在最后一行(正如我之前所想的那样)。

1 个答案:

答案 0 :(得分:1)

例外情况将指向包含的行*:

  1. 最后一个运算符(如果以前的文字/运算符导致异常)。

  2. 最后一个文字(否则即最后一个文字/运算符导致异常)。

  3. 然而,如果这不是您看到的行为,那么可能可能是由于您的某个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"

    *更新:我没有这方面的参考,如果您遇到一个,请评论一个。 我以前认为这只是最后一行!