Можно ли заменить отслеживание исключения? Например:
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
предел печати).
Я смотрел на этот , который был дан как ответ на аналогичный вопрос . Я надеюсь, что у меня будет более простой способ для моего варианта использования, любые предложения будут высоко оценены!