Ответ 1
Значение может быть напечатано, это просто не так.
Однако в PyPI есть tb module, который на самом деле будет печатать значения переменных в трассировке стека.
Например, рассмотрим случай:
>>> a = []
>>> a[12]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
исключение не выводит значение, выходящее за пределы диапазона.
Я предполагаю, что мы не знаем, была ли функция __str__
того, что было передано, вызывает исключение, поэтому мы ее не трогаем?
Значение может быть напечатано, это просто не так.
Однако в PyPI есть tb module, который на самом деле будет печатать значения переменных в трассировке стека.
Знание метода __str__
не является проблемой - если оно не предоставлено для объекта, вместо него используется __repr__
, и любой случай __repr__
обычно имеет смысл в сообщении об исключении. Что касается причины, я не думаю, что есть определенная причина. Если бы вы предложили изменить это и отправили патч, я не вижу причин, почему он будет отклонен. Однако на самом деле внесение изменений, вероятно, будет довольно масштабным, потому что это будет означать изменение везде, где возникает исключение. На самом деле это, вероятно, главная причина, по которой это не было сделано. Если вокруг есть разработчик python, они могут дать лучший ответ...
Изменить: стоит отметить, что это не относится ко всем исключениям. Например, AttributeError сообщает о недопустимых значениях.