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 не было выброшено никаких исключений.