Ссылка: более ранняя публикация на Не показывать строку поднятия 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 $
В идеале, трассировка не должна включать обе строки кода, которыеВозникает исключение. Viz.:
raise ValueError('num_throws should not exceed 20. The value of num_throws was: {}'.format(num_throws))
вместе с фактическим исключением, которое я хочу выбросить. Viz.:
ValueError: num_throws не должно превышать 20. Значение num_throws было: 25
(не удалось использовать второй блок кода здесь, извините)
Возможно ли этобез взлома системных характеристик где-нибудь?