Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как можно разом обработать все исключения?

꧁Tester꧂ ︎ Мудрец (19191), на голосовании 2 месяца назад
Как можно разом обработать все исключения?
Допустим я пока не знаю. где в коде у меня могут возникнуть исключения.
Я хочу сразу задать логику при их возникновении.
По типу
 try: ...
except: ... pass
Где я бы к примеру хотел сразу сделать вывод сообщения другим цветом, в случае возникновения. Но более того, главное чтобы код не обрывался, а продолжил свою работу.
То есть раз указать логику, а потом использовать ее во всем коде. А не каждый раз создавать try, pass.
Голосование за лучший ответ
Haredim Мастер (1991) 3 месяца назад
К сожалению, в Python нет встроенного механизма для одновременной обработки всех возможных исключений во всем коде.

Но есть несколько обходных путей, которые позволят вам централизовать логику обработки ошибок и продолжить работу программы при возникновении исключений:

1. Декораторы:

Создайте декоратор, который оборачивает ваш код.
Внутри декоратора добавьте блок try-except.
В блоке except реализуйте логику обработки ошибок, например, вывод сообщения в другом цвете.
Используйте этот декоратор для всех функций или частей кода, где требуется обработка исключений.


 def handle_exception(function): 
def wrapper(*args, **kwargs):
try:
function(*args, **kwargs)
except Exception as e:
print(f"Ошибка: {e.__class__.__name__}") # Вывод в другом цвете
# Дополнительная логика обработки ошибки
return обертка

@handle_exception
def my_code(patrameter):
# ... ваш код ...

my_code("my_argument")
Лайт ЯгамиИскусственный Интеллект (300645) 3 месяца назад
Есть, в модуле sys
Haredim Мастер (1991) Лайт Ягами, нету, не свисти
HaredimМастер (1991) 3 месяца назад
2. Контекстные менеджеры:

Используйте контекстные менеджеры для управления блоками кода, где могут возникать исключения.
Внутри контекстного менеджера реализуйте логику обработки ошибок.
Применяйте контекстный менеджер с помощью оператора with.


 class ErrorProcessor: 
def __enter__(self):
pass

def __exit__(self, exc_type, exc_val, exc_tb):
if exc_type:
print(f"Ошибка: {exc_type.__name__}") # Вывод в другом цвете
# Дополнительная логика обработки ошибки
return True # Продолжить выполнение кода

with ErrorProcessor():
# ... ваш код ...
Лайт Ягами Искусственный Интеллект (300645) 3 месяца назад
꧁Tester꧂ ︎Мудрец (19191) 3 месяца назад
Я типа уже знаю об этом.
Проблема вот в этом.

 Such an approach gives me full coverage of the unexpected exceptions in the whole script. I know – this function is not able to recover from an exception, but at least I know what happened 
Короче. Один раз сработает и код дальше не пойдет. А я ищу, чтобы код дальше шел, то есть сработал pass.
Лайт Ягами Искусственный Интеллект (300645) ꧁Tester꧂ ︎, а, так не получится
Похожие вопросы