поднять [исключение] () также вызывает сам фактический код исключения вместе с исключением

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

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

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


person Jim JR Harris    schedule 18.10.2019    source источник
comment
Не связывайтесь с этим. Это не стоит путаницы, которую вы внесете. Вы можете счесть такое поведение запутанным, но людей будет еще больше запутывать, когда им придется читать странные, настроенные обратные трассировки.   -  person user2357112 supports Monica    schedule 19.10.2019
comment
если вы твердо настроены на это, вы можете сделать import sys; sys.tracebacklimit = 0, и тогда трассировка не появится, но я повторяю мнение @user2357112, что это не очень хорошая идея.   -  person gold_cy    schedule 19.10.2019
comment
Хорошо, я понял - возиться со спящими драконами - неоптимальный выбор.   -  person Jim JR Harris    schedule 20.10.2019
comment
Реальный вопрос здесь заключается в том, почему это все еще такая распространенная проблема? Это чертовски уродливо, выставляет разработчика программы некомпетентным дураком в глазах пользователей и может сильно запутать пользователя. Я бы уже давно назвал это ошибкой серьезности-1 - приоритет-1.   -  person Jim JR Harris    schedule 20.10.2019
comment
P.S. Как пометить ответ как ответ на мой вопрос? Я согласен с обоими комментариями и хотел бы отметить первый как ответ.   -  person Jim JR Harris    schedule 20.10.2019