【问题标题】:Is it possible to configure Python interpreter to provide more useful info on errors?是否可以配置 Python 解释器以提供更多有用的错误信息?
【发布时间】: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


【解决方案1】:

您可以使用库better_exceptions。

import better_exceptions

a = [[1, 2], [3, 4]]
i, j, d = 1, 350, 100
a[i][j] += max(a[i][j-d], a[i-1][j])

这并不完全符合您的要求(better_exceptions 只是显示所有变量值,错误消息并不更明确),但我认为这是一个好的开始。

【讨论】:

    猜你喜欢
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 2023-03-08
    • 2016-02-15
    • 1970-01-01
    相关资源
    最近更新 更多