Ссылка: более раннее сообщение в Не показывать строку повышения Python в стек исключений, который не дает адекватного ответа на этот вопрос.
В Python 3.7.3 на Raspberry Pi (последняя версия, доступная для этой платформы) при возникновении исключения происходят две вещи: 1. Фактическая строка кода, вызывающая исключение, указана в трассировке. 2. Затем печатается фактическое исключение и текст, который я хочу вызвать.
ИМХО, это и беспорядочно, и запутанно для потенциального пользователя моего кода. В идеале должно произойти следующее: трассировка должна идентифицировать исключение и (если возможно) строку кода, вызвавшую возникновение исключения, как это делает встроенный обработчик исключений. Это проще, чище и намного понятнее
if num_die > 5:
raise ValueError('num_die should not exceed 5. The value of num_die was: {}'.format(num_die))
elif num_throws > 20:
raise ValueError('num_throws should not exceed 20. The value of num_die was: {}'.format(num_throws))
elif num_sides == 4 or num_sides == 6 or num_sides == 8 or num_sides == 12 or num_sides == 20:
return int(num_die), int(num_sides), throws
else:
raise ValueError('A fair die can only have 4, 6, 8, 12, or 20 sides. The number of sides you requested was: {}'.format(num_sides))
вызывает следующее при запуске:
Traceback (most recent call last):
File "./Function_Test.py", line 18, in <module>
i = (throw_dice(num_throws=25, num_sides=6))
File "./Function_Test.py", line 11, in throw_dice
raise ValueError('num_throws should not exceed 20. The value of num_throws was: {}'.format(num_throws))
ValueError: num_throws should not exceed 20. The value of num_throws was: 25
pi@Pi-4Gig:~/Python $
В идеале трассировка не должна включать одновременно строку кода, вызывающую исключение. А именно:
raise ValueError('num_throws should not exceed 20. The value of num_throws was: {}'.format(num_throws))
вместе с фактическим исключением, которое я хочу бросить. А именно:
ValueError: num_throws не должно превышать 20. Значение num_throws было: 25
(здесь нельзя использовать второй блок кода, извините)
Возможно ли это где-то без взлома системных характеристик?
import sys; sys.tracebacklimit = 0
, и тогда трассировка не появится, но я повторяю мнение @user2357112, что это не очень хорошая идея. - person gold_cy   schedule 19.10.2019