例如,考虑一下案例:
>>> a = []
>>> a[12]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
异常不会打印超出范围的值。
我的猜测是,我们不知道传入的任何内容的__str__
函数是否会引发异常,所以我们不接触它?
答案 0 :(得分:3)
可以打印该值,但事实并非如此。
但是,PyPI上有tb module实际上会打印堆栈跟踪中变量的值。
答案 1 :(得分:2)
了解__str__
方法不是问题 - 如果没有为对象提供,则使用__repr__
代替,而任何情况__repr__
通常都会更有意义异常消息。至于原因,我认为没有具体原因。如果您建议更改并提交补丁,我认为没有理由拒绝为什么会被拒绝。然而,实际进行更改可能是相当大的努力,因为它意味着在异常被引发的任何地方都会发生变化。这实际上可能是它没有完成的主要原因。如果有一个python开发者,他们可能会给出更好的答案......
编辑:值得指出的是,并非所有例外情况都是如此。例如,AttributeError会报告有问题的值。