Подтвердить что ты не робот

Почему исключения python обычно не печатают оскорбительные значения?

Например, рассмотрим случай:

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

исключение не выводит значение, выходящее за пределы диапазона.

Я предполагаю, что мы не знаем, была ли функция __str__ того, что было передано, вызывает исключение, поэтому мы ее не трогаем?

4b9b3361

Ответ 1

Значение может быть напечатано, это просто не так.

Однако в PyPI есть tb module, который на самом деле будет печатать значения переменных в трассировке стека.

Ответ 2

Знание метода __str__ не является проблемой - если оно не предоставлено для объекта, вместо него используется __repr__, и любой случай __repr__ обычно имеет смысл в сообщении об исключении. Что касается причины, я не думаю, что есть определенная причина. Если бы вы предложили изменить это и отправили патч, я не вижу причин, почему он будет отклонен. Однако на самом деле внесение изменений, вероятно, будет довольно масштабным, потому что это будет означать изменение везде, где возникает исключение. На самом деле это, вероятно, главная причина, по которой это не было сделано. Если вокруг есть разработчик python, они могут дать лучший ответ...

Изменить: стоит отметить, что это не относится ко всем исключениям. Например, AttributeError сообщает о недопустимых значениях.