try...except
. Сначала код, который может вызвать исключение, помещается в блок try
. Затем, в блоке except
указывается тип исключения, которое нужно перехватить, и код, который будет выполнен в случае возникновения этого исключения. Можно перехватывать несколько типов исключений, используя несколько блоков except
, либо один блок except (Type1, Type2, ...)
. Можно также использовать блок except Exception as e
для перехвата всех исключений, но это не рекомендуется. Блок finally
выполнится в любом случае, независимо от того, было ли исключение или нет.
Перехват пользовательских исключений в Python, как и стандартных, осуществляется с помощью конструкции try...except
. Важно, чтобы исключение, которое вы хотите перехватить, было унаследовано от базового класса Exception
(или одного из его подклассов, таких как BaseException
, но обычно это не рекомендуется напрямую перехватывать BaseException
).
Основные шаги:
Exception
. Вы можете добавить свои атрибуты и методы для хранения дополнительной информации об ошибке.raise
, чтобы вызвать ваше пользовательское исключение.try
. После блока try
добавьте один или несколько блоков except
, чтобы обработать исключение. Укажите класс исключения, которое вы хотите перехватить в блоке except
.Пример:
# Определение пользовательского исключения
class MyCustomError(Exception):
def __init__(self, message, error_code):
super().__init__(message)
self.error_code = error_code
# Функция, которая может вызвать исключение
def process_data(data):
if data is None:
raise MyCustomError("Данные не могут быть None", 1001)
# ... остальной код ...
return "Данные успешно обработаны"
# Перехват исключения
try:
result = process_data(None)
print(result)
except MyCustomError as e:
print(f"Произошла ошибка: {e}")
print(f"Код ошибки: {e.error_code}")
except Exception as e: # обработка любых других исключений.
print(f"Произошла непредвиденная ошибка: {e}")
finally:
print("Этот блок выполняется всегда, независимо от того, произошло исключение или нет.")
Объяснение:
MyCustomError
наследуется от Exception
и позволяет передавать сообщение об ошибке и код ошибки.process_data
вызывает MyCustomError
, если входные данные равны None
.try...except
перехватывает MyCustomError
и печатает сообщение об ошибке и код ошибки. Блок `except Exception as e` перехватывает все другие исключения, которые могут произойти в блоке `try`. Блок `finally` выполняется всегда, независимо от того, было ли выброшено исключение.Важно:
except
. Избегайте перехвата просто Exception
без необходимости, так как это может скрыть неожиданные ошибки.finally
для выполнения кода, который должен быть выполнен в любом случае (например, закрытие файлов или освобождение ресурсов).except
для обработки разных типов исключений. Порядок блоков except
важен: они проверяются сверху вниз, и выполняется только первый блок, соответствующий типу исключения.