【发布时间】:2018-03-01 00:27:44
【问题描述】:
例如,“IndexError: list index out of range”真的可以说是哪个变量中的什么值导致了错误以及界限是什么?例如。而不是裸露的
a[i][j] += max(a[i][j-d], a[i-1][j])
IndexError: list index out of range
得到这个:
IndexError: list index out of range: j-d=250 for expected range of [0:250]
这可以减少最平凡的开发过程中相当长的时间,否则我会浪费在回溯代码或插入打印语句来获取此类信息上。
【问题讨论】:
-
引发异常的位置可能无法知道是哪个表达式导致了错误(
j-d已被评估)。您还忘记询问“哪个对象触发了此错误”....好主意,但您应该查看列表理解并迭代值而不是索引以避免此类错误。 -
不,无法将 Python 配置为执行此操作。我想一个花哨的 IDE 可以做到这一点,但额外的信息根本不会来自 Python。
-
@JohnGordon,当然可以。根据 Python Doc(来自 python IDLE > Help Menu> Python Docs> Q&A Section),有问题“是否有带有断点、单步等的源代码级调试器?”他们提到了一些帮助您调试代码的工具,它们是“PythonWin”、“Boa Constructor”、“Eric”、“Pydb”,以及其他商业 IDE,例如“Wing IDE”、“Komodo IDE”和“PyCharm” ”。他们值得一试。谢谢
-
您可以将有问题的代码包装在 try/except 中。 pdb.set_trace() 中的 except 将为您提供调试器。 pp locals() 将漂亮地打印变量,并且 len(your_list) 应该提供一些见解。 from traceback import print_exc 也可以提供帮助,但在调试器中您需要将其前缀为 p print_exc()。
标签: python exception indexoutofboundsexception