Блок try/except: перехват исключений
Блок try/except в Python: как перехватывать ошибки, получать информацию об исключении и не давать программе упасть.
Исключение (exception) — это сигнал об ошибке, который Python генерирует, когда не может выполнить операцию. Блок
try/exceptпозволяет перехватить этот сигнал и обработать его.
Базовый синтаксис
try:
result = 10 / 0
except ZeroDivisionError:
print("Делить на ноль нельзя!")
print("Программа продолжается")
Вывод:
Делить на ноль нельзя! Программа продолжается
Без try/except программа бы упала с сообщением ZeroDivisionError: division by zero. С блоком — ошибка перехвачена, выполнение продолжается.
Получение информации об ошибке
Конструкция except ТипОшибки as e позволяет получить объект исключения и вывести его описание:
numbers = [1, 2, 3]
try:
print(numbers[10])
except IndexError as e:
print(f"Ошибка: {e}")
print(f"Тип: {type(e).__name__}")
Вывод:
Ошибка: list index out of range Тип: IndexError
Несколько типичных исключений
Исключение | Причина |
| деление на ноль |
| неправильное значение аргумента |
| неправильный тип данных |
| индекс вне диапазона |
| ключ не найден в словаре |
| файл не существует |
Защита преобразования типов
def safe_int(s):
try:
return int(s)
except ValueError:
return None
print(safe_int("42")) # 42
print(safe_int("abc")) # None
print(safe_int("3.14")) # None — int() не принимает дробную строку
Вывод:
42 None None
Паттерн «обернуть рискованный вызов в функцию с try/except и вернуть
Noneпри ошибке» — один из самых распространённых в Python-коде.
Bare except — почему не стоит
# Плохо: ловим ВСЕ ошибки, включая KeyboardInterrupt и SystemExit
try:
risky()
except: # без указания типа
pass
# Хорошо: ловим только ожидаемые
try:
risky()
except (ValueError, TypeError) as e:
print("Ожидаемая ошибка:", e)
Голый except перехватывает даже нажатие Ctrl+C и скрывает неожиданные баги — это затрудняет отладку. Всегда указывайте конкретный тип.
Коротко
try— код, который может выбросить исключение;except ТипОшибки— обработчик.except ТипОшибки as eдаёт доступ к объекту исключения и его описанию.- Всегда указывайте конкретный тип исключения — не используйте голый
except. - После перехвата исключения программа продолжает выполнение.