Я не уверен, возможно ли элегантно изменить все сообщения об исключениях.
Вот следующая лучшая вещь, которую я мог бы придумать. Мы собираемся использовать декораторы.
В общем, декораторы - это как обертки для функций. Вот хорошее объяснение того, как они работают здесь: https://youtu.be/7lmCu8wz8ro?t=2720
Это то, что я придумал:
def except_message(message=''):
def inner(f):
def wrapper(*args, **kwargs):
try:
return f(*args, **kwargs)
except Exception as e:
raise type(e)(str(e) + "\n" + message).with_traceback(sys.exc_info()[2])
return wrapper
return inner
Поверх функции, которую вы хотите чтобы использовать этот декоратор, напишите @except_message(message='My_message')
, где 'My_message' - это то, что вы хотите, чтобы сообщение было. (Он добавит его в конец сообщения об исключении)
Пример:
@except_message(message='FOUND AN EXCEPTION')
def foo():
raise Exception()
После запуска консоль возвращает следующее:
Traceback (most recent call last):
File "main.py", line 7, in wrapper
return f(*args, **kwargs)
File "main.py", line 15, in foo
raise Exception()
Exception
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "main.py", line 17, in <module>
foo()
File "main.py", line 9, in wrapper
raise type(e)(str(e) + "\n" + message).with_traceback(sys.exc_info()[2])
File "main.py", line 7, in wrapper
return f(*args, **kwargs)
File "main.py", line 15, in foo
raise Exception()
Exception:
FOUND AN EXCEPTION
Если вы хотите, чтобы появилось только выбранное вами сообщение, измените функцию декоратора с str(e) + "\n" + message
на message
.
Также, чтобы изменить все исключения для этого сообщения, вы можете заключить код в функцию (либо вызывая его внутри функции в другом файле, либо просто изменяя отступ), а затем используя декоратор.
Кредиты:
{ ссылка }
{ ссылка }