为什么python异常通常不会打印违规值?

时间:2012-03-13 19:16:05

标签: python exception

例如,考虑一下案例:

>>> a = []
>>> a[12]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

异常不会打印超出范围的值。

我的猜测是,我们不知道传入的任何内容的__str__函数是否会引发异常,所以我们不接触它?

2 个答案:

答案 0 :(得分:3)

可以打印该值,但事实并非如此。

但是,PyPI上有tb module实际上会打印堆栈跟踪中变量的值。

答案 1 :(得分:2)

了解__str__方法不是问题 - 如果没有为对象提供,则使用__repr__代替,而任何情况__repr__通常都会更有意义异常消息。至于原因,我认为没有具体原因。如果您建议更改并提交补丁,我认为没有理由拒绝为什么会被拒绝。然而,实际进行更改可能是相当大的努力,因为它意味着在异常被引发的任何地方都会发生变化。这实际上可能是它没有完成的主要原因。如果有一个python开发者,他们可能会给出更好的答案......

编辑:值得指出的是,并非所有例外情况都是如此。例如,AttributeError会报告有问题的值。