Понимание и использование ключевого слова "raise" в Python

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

В Python слово raise применяется для инициирования исключения в том случае, когда вам необходимо специально вызвать ошибку. Вы указываете класс исключения и передаёте сообщение об ошибке. Вот перекрасный пример использования:

Python
Скопировать код
if not user.is_admin:
    raise PermissionError('Внимание: у данного пользователя отсутствуют права администратора.')

Здесь raise генерирует PermissionError, если привилегии пользователя не соответствуют требованиям.

Кинга Идем в IT: пошаговый план для смены профессии

Создание пользовательских исключений

С помощью raise вы можете создавать свои уникальные исключения, которые будут отражать специфику вашего программного продукта. Это незаменимо при разработке библиотек или соблюдении определенных норм и правил. В итоге это сделает ваш код более читаемым и упростит процесс отладки. Вот пример создания исключения собственного класса:

Python
Скопировать код
class InsufficientFundsError(Exception):
    def __init__(self, balance, amount):
        message = f"Не хватает средств: попытка снять {amount}, на балансе {balance}."
        super().__init__(message)

def withdraw(balance, amount):
    if amount > balance:
        raise InsufficientFundsError(balance, amount)
    balance -= amount
    return balance

Подобная реализация заметно повышает уровень управления проблемами, делая его более детальным и предсказуемым.

Повторный вызов исключений

Благодаря конструкции raise from вы можете создать перенаправление исключения, которое сохраняет контекст исходной ошибки и позволяет создавать более полные отчеты о проблемах.

Python
Скопировать код
try:
    process_file()
except FileNotFoundError as e:
    raise RuntimeError("Файл не найден.") from e

Также вы можете повторно активировать уже пойманное исключение, чтобы передать его дальше по стеку вызовов:

Python
Скопировать код
try:
    risky_operation()
except SomeError:
    log_error()
    raise

Гарантия соблюдения правил

С помощью raise можно гарантировать соблюдение определенных условий в программе:

Python
Скопировать код
def set_age(age):
    if not 0 < age < 150:
        raise ValueError("Возраст должен быть в пределах от 0 до 150 лет.")

Визуализация

Представим такую ситуацию: ваш день начинается (т.е. программа запускается), и вдруг срабатывает будильник (raise):

Python
Скопировать код
try:
   write_code()
   test()
   relax()
except:
   raise

Фиксация raise влияет на процесс следующим образом:

Markdown
Скопировать код
До: [Кодирование, Тестирование, Отдых]  
После: [Кодирование, Ошибка: обнаружена проблема!]  # Процесс прерван из-за `raise`

Полное управление ошибками

Python настоятельно рекомендует нам освоить работу с исключениями, следуя его лучшим практикам:

Точные исключения

Стремитесь к точным исключениям, избегая слишком обширных типов:

Python
Скопировать код
try:
    operation_that_might_throw_ioerror()
except IOError as e:
    handle_the_specific_ioerror_case(e)

Очистка ресурсов

Обязательно должны быть закрыты все ресурсы в блоке finally, чем вы обеспечиваете себе «чистую спину»:

Python
Скопировать код
try:
    open_file()
    read_file()
except IOError as e:
    handle_error(e)
finally:
    close_file()

Использование else

Блок else активируется только в том случае, если не было обнаружено исключений:

Python
Скопировать код
try:
    paint_house()
except Exception as error:
    handle_error(error)
else:
    feel_accomplished()

С посощью with можно обеспечить корректное управление ресурсами, что исключает необходимость явного закрытия ресурсов:

Python
Скопировать код
with open('notebook.txt', 'r') as f:
    notes = f.read()

Полезные материалы

  1. Официальная документация Python, затрагивающая вопросы обработки ошибок и исключений.
  2. Глубокое и подробное руководство по исключениям и использованию ключевого слова raise в Python от Real Python.
  3. Статья на GeeksforGeeks о тонкостях и стратегиях использования raise.
  4. Обсуждения на Stack Overflow, посвящённые вопросам обработки исключений, которые поддерживаются сообществом.
  5. Коллекция техник обработки исключений, представленная на базе IBM Developer.
  6. Обходяем вопрос исключений с разносторонних подходов и через реальные примеры на Programiz.
  7. Пошаговое видео о важности и применении обработки ошибок от Corey Schafer на YouTube.