Замена / изменение трассировки в исключении - PullRequest
0 голосов
/ 03 ноября 2019

Можно ли заменить отслеживание исключения? Например:

In file.py:

def decide():
    return fun() #some complex chain of function calls 

In other_file.py:

def test():

    a = decide()
    if a is None:
        raise ActionError('blah blah')

test()

Дает вывод:

Traceback (most recent call last):
  File "other_file.py", line 124, in <module>
    test()
  File "other_file.py", line 120, in test
    raise ActionError("blah blah")
ActionError: blah blah

Если я записываю кадры, используемые в action(), я хочу заменить на них старую трассировку. Желаемый результат:

Traceback (most recent call last):
  File "file.py", line 114, in decide 
    decide()
  File "file.py", line 100, in fun
    raise ActionError("blah blah")
ActionError: blah blah

Возможно, заменив raise ActionError чем-то более значимым (например, оскорбительной строкой). Я знаю, что вы спросите: «Зачем вам это делать?»к этому я говорю, я разрабатываю платформу, в которой пользователь определяет функцию решить (). Для них более полезно увидеть трассировку к реальному источнику ошибки - то есть, что они возвращают недопустимое действие. (обратите внимание, что проверка a is None - просто игрушечный пример).

Я понимаю, что это ужасная практика, она не имеет смысла в качестве следа кола и т. д., и я открыт для альтернатив! ... если это означает просто установить сообщение об исключении, то, если возможно, я хотел бы знать, как удалить трассировку все вместе (без использования traceback предел печати).

Я смотрел на этот , который был дан как ответ на аналогичный вопрос . Я надеюсь, что у меня будет более простой способ для моего варианта использования, любые предложения будут высоко оценены!

...