Какие конструкции в Python предназначены для обработки ошибок и исключительных ситуаций?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
В Python для обработки ошибок используют try/except, а для гарантированной очистки — finally. Для генерации собственных ошибок применяют raise, а для проверки условий — assert. Важно понимать, какие исключения ловить, как не скрывать реальные проблемы и чем отличается обработка от проброса ошибки дальше.
Определение:
Обработка ошибок в Python — это механизм, который позволяет перехватывать исключения, возникающие во время выполнения программы, и управлять реакцией на них. Основная конструкция — try/except: в try помещают код, который может упасть, а в except — обработку конкретной ошибки. Дополнительно используют else для кода без ошибок и finally для выполнения действий в любом случае.
Пример использования:
def divide(a, b):
try:
result = a / b
except ZeroDivisionError:
return "Нельзя делить на ноль"
else:
return result
finally:
print("Операция деления завершена")
print(divide(10, 2))
print(divide(10, 0))
Пояснение кода:
В примере в блоке try выполняется деление a / b, которое может вызвать исключение ZeroDivisionError, если b == 0. Если ошибка возникла, управление переходит в except, и функция возвращает понятное сообщение вместо падения программы. Если исключения не было, отрабатывает else, где возвращается результат деления. Блок finally выполняется всегда — и при успехе, и при ошибке — поэтому он подходит для закрытия файлов, освобождения ресурсов или логирования.
Если нужно явно создать ошибку, используют raise, например при валидации входных данных:
def set_age(age):
if age < 0:
raise ValueError("Возраст не может быть отрицательным")
return age
Ключевые моменты:
try/except— основа обработки исключений в Python.elseвыполняется только если вtryне было ошибки.finallyвыполняется всегда, даже если была ошибка илиreturn.raiseиспользуется для явного возбуждения исключений.- Ловить лучше конкретные исключения, а не
except Exceptionбез необходимости. assertполезен для внутренних проверок, но не заменяет полноценную обработку ошибок.