Ответ
В Python для обработки исключений используется конструкция try/except со следующими блоками:
try:— блок, в котором размещается код, способный вызвать исключение (ошибку).except [ТипИсключения]:— блок-обработчик. Выполняется, если вtryвозникло исключение указанного типа. Можно использовать несколько блоковexceptдля разных типов ошибок.else:(опционально) — блок, который выполняется только если в блокеtryне было выброшено ни одного исключения.finally:(опционально) — блок, который выполняется всегда, независимо от того, было исключение или нет. Используется для обязательных действий (закрытие файлов, соединений с БД).
Практический пример с пояснением:
def safe_divide(x, y):
try:
result = x / y # Потенциально опасная операция
except ZeroDivisionError:
print("Ошибка: Деление на ноль!")
result = None
except TypeError:
print("Ошибка: Неверный тип аргументов (ожидались числа).")
result = None
else:
# Сработает только если деление прошло успешно
print(f"Деление выполнено успешно.")
finally:
# Сработает в любом случае, например, для логирования
print(f"Операция деления {x} / {y} завершена.n")
return result
print(safe_divide(10, 2)) # Сработают try -> else -> finally
print(safe_divide(10, 0)) # Сработают try -> except ZeroDivisionError -> finally Ответ 18+ 🔞
А, ну это ж классика, ебушки-воробушки! Смотри, как тут всё устроено, чтобы твой код не накрылся медным тазом при первой же ошибке. Всё крутится вокруг четырёх главных блоков, как будто в цирке.
Вот представь: ты пишешь код в блоке try:. Это как зайти на минное поле — вроде идёшь, но подозрение ебать чувствую, что щас что-то бахнет. Если всё ок — молодца, проскочил. Если нет — летишь прямиком в except, где тебя уже ждут с распростёртыми объятиями и готовы ошибку поймать. Можно даже несколько таких ловушек поставить на разные типы косяков.
А вот else: — это такая хитрая жопа. Он срабатывает только если в try всё было чисто, нихуя не взорвалось. Типа бонус за аккуратность.
Ну и звезда программы — finally:. Этот пацан работает всегда, без вариантов. Был ералаш или нет — ему похуй. Он как последний пацан в баре, который всегда выключает свет и запирает дверь. Идеально, чтобы файлы закрыть или соединения к базе прибить, а то потом ресурсы висят, как сопли.
Смотри на живом примере, сейчас всё станет ясно:
def safe_divide(x, y):
try:
result = x / y # Вот тут самый пиздец может случиться, если y ноль
except ZeroDivisionError:
print("Ошибка: Деление на ноль!")
result = None
except TypeError:
print("Ошибка: Неверный тип аргументов (ожидались числа).")
result = None
else:
# А это выполнится, только если всё прошло как по маслу
print(f"Деление выполнено успешно.")
finally:
# А этот чувак отработает в любом случае, хоть ты тресни
print(f"Операция деления {x} / {y} завершена.n")
return result
print(safe_divide(10, 2)) # Всё ок: try -> else -> finally
print(safe_divide(10, 0)) # А вот тут пиздец: try -> except ZeroDivisionError -> finally
Вот и вся магия. Главное — не бздеть и пользоваться, а то без этого твой код превратится в одну большую ошибку, которая всех пошлёт нахуй при первом же чихе.