try
, except
в Python позволяет перехватывать как встроенные исключения (например, TypeError
, ValueError
), так и пользовательские (определенные разработчиком) исключения. В блоке except
можно указывать конкретный тип исключения, которое нужно перехватить, или использовать except Exception
для перехвата всех исключений.
Да, безусловно, конструкцию try...except
в Python можно использовать для перехвата как встроенных (стандартных) исключений, предоставляемых самим Python, так и собственных, пользовательских исключений, которые вы определяете в своем коде.
Основной принцип работы такой же: код, который потенциально может вызвать исключение, помещается в блок try
. Если в этом блоке возникает какое-либо исключение, Python ищет соответствующий блок except
, который может обработать это исключение. Если подходящий блок except
найден, код в нем выполняется. Если нет, исключение продолжает распространяться вверх по стеку вызовов, пока не будет обработано или не приведет к завершению программы.
Пример перехвата встроенного исключения:
try:
x = 10 / 0 # Это вызовет ZeroDivisionError
except ZeroDivisionError:
print("Попытка деления на ноль!")
Пример перехвата пользовательского исключения:
class MyCustomError(Exception):
"""Пользовательское исключение."""
pass
def some_function(value):
if value < 0:
raise MyCustomError("Значение не может быть отрицательным")
return value
try:
result = some_function(-5)
except MyCustomError as e:
print(f"Поймано пользовательское исключение: {e}")
else:
print(f"Результат: {result}")
В примере выше, MyCustomError
является классом исключения, который наследуется от базового класса Exception
. Блок except MyCustomError as e:
перехватывает это исключение и позволяет получить доступ к сообщению об ошибке через переменную e
.
Важно помнить, что блоки except
проверяются по порядку. Если первый except
соответствует исключению, остальные не проверяются. Рекомендуется располагать блоки except
от более специфичных исключений к более общим (например, except ZeroDivisionError
перед except Exception
), чтобы избежать случайного перехвата более специфичных исключений общим обработчиком. Также можно использовать несколько блоков except
для обработки разных исключений в одном блоке try
.
Кроме того, можно использовать блок finally
, который будет выполнен в любом случае, независимо от того, было ли выброшено исключение или нет. Обычно используется для очистки ресурсов (например, закрытия файлов).
Наконец, блок else
может быть использован после except
. Он выполняется только в том случае, если в блоке try
не было выброшено никаких исключений.