повышение [исключение] () также вызывает сам фактический код исключения вместе с исключением - PullRequest
0 голосов
/ 19 октября 2019

Ссылка: более ранняя публикация на Не показывать строку поднятия 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

(не удалось использовать второй блок кода здесь, извините)

Возможно ли этобез взлома системных характеристик где-нибудь?

...