except
. Например:
try:
# Код, который может вызвать исключение
pass
except (TypeError, ValueError) as e:
# Обработка TypeError или ValueError
print(f"Произошла ошибка: {e}")
except Exception as e:
# Обработка всех остальных исключений
print(f"Произошла неожиданная ошибка: {e}")
В данном примере, если произойдет TypeError
или ValueError
, то выполнится первый блок except
.
В Python есть несколько способов перехватить исключения разных типов в одном блоке except
. Рассмотрим наиболее распространенные:
1. Перечисление исключений в кортеже:
Самый распространенный и рекомендуемый способ - указать все типы исключений, которые нужно перехватить, в кортеже после ключевого слова except
. Это позволяет явно перечислить обрабатываемые исключения и обеспечивает лучшую читаемость кода.
try:
# Код, который может вызвать исключение
result = 10 / int(input("Введите число: "))
print(f"Результат: {result}")
except (ValueError, ZeroDivisionError) as e:
# Обработка ValueError и ZeroDivisionError
print(f"Произошла ошибка: {e}")
except Exception as e:
# Обработка всех остальных исключений
print(f"Произошла неожиданная ошибка: {e}")
finally:
# Код, который выполнится в любом случае
print("Завершение работы")
В этом примере, если пользователь введет не число, будет выброшено ValueError
, а если введет 0, будет выброшено ZeroDivisionError
. Оба этих исключения будут перехвачены первым блоком except
.
Exception
- это базовый класс для большинства исключений в Python. Использование его в качестве обработчика "всех остальных" исключений должно быть осторожным и рассматриваться как крайняя мера, поскольку это может скрыть неожиданные проблемы в коде. Лучше явно перечислять все исключения, которые вы ожидаете и знаете, как обработать.
2. Перехват базового класса исключения:
Если несколько исключений наследуются от общего базового класса, можно перехватить этот базовый класс. Например, IOError
является базовым классом для FileNotFoundError
и PermissionError
.
try:
with open("nonexistent_file.txt", "r") as f:
content = f.read()
except IOError as e:
print(f"Произошла ошибка ввода/вывода: {e}")
В этом случае, если файл не будет найден (FileNotFoundError
) или у вас не будет прав доступа (PermissionError
), блок except IOError
будет выполнен.
Важные моменты:
except
имеет значение. Python проверяет блоки except
сверху вниз, и выполняется первый блок, соответствующий типу выброшенного исключения.Exception
, в конце.except:
(без указания типа исключения) крайне не рекомендуется, так как это может скрыть важные ошибки и усложнить отладку.finally
выполняется всегда, независимо от того, было ли выброшено исключение или нет. Он обычно используется для освобождения ресурсов (например, закрытия файлов).Выбор способа перехвата исключений зависит от конкретной ситуации и требований к коду. Оптимальным является явное перечисление ожидаемых исключений в кортеже, что обеспечивает лучшую читаемость и управляемость кода.