【发布时间】:2018-06-10 07:05:43
【问题描述】:
Python 的错误只显示发生在哪一行错误。
运行时错误示例,其中知道行中的哪个位置导致错误可以节省时间:
Traceback (most recent call last):
File "/Users/clickbait/Projects/Python Projects/detail-processing.py", line 34, in <module>
samples = [oldMatrix[x + pixel[0], y + pixel[1]][2] for pixel in pixelsToSample]
IndexError: image index out of range
如果错误还显示导致错误的列或字符将很有用。就像在示例中一样,如果错误指出问题出在哪里,我不需要检查所有 3 个列表索引。
另一个运行时错误,如果知道行中的哪个位置导致错误将节省时间:
Traceback (most recent call last):
File "/Users/clickbait/Projects/stackpromo/main.py", line 482, in get
postSlogan=tagLines[int(randomAd.tagLine)][JSON['post_type']].format(site=adSiteNames[randomAd.site]),
TypeError: string indices must be integers, not unicode
这条线有很多不雅点([xxx])。我想知道是哪个索引导致了问题!
是否有设置(可能是命令行标志)使 Python 错误显示引发异常的列/字符以及行号?
语法错误指向带有 ^ 符号的无效语法,但运行时错误不指向导致错误的变量。
【问题讨论】:
-
编译器不保留列信息,只保留行信息。
-
你的代码被标记化,然后变成一个抽象语法树,然后那个树被编译成字节码。到出现运行时错误时,只保留行号,而不是子表达式的确切字符位置。
-
如果您发现在一行上调试列表解析太麻烦,您可以使用
append()将列表解析拆分为for循环。 -
这些 cmets 应该是答案,因为它们完全回答了问题。
-
这也没什么大不了的。在大多数情况下,包括在这种情况下,只有很多地方可能会出错。如果你
标签: python python-3.x exception error-handling runtime-error