Python Tutorials

Обработка исключений в Python: Полное руководство

Spread the love

Обработка исключений — критически важный компонент надежного программирования на Python. Она позволяет элегантно управлять ошибками, которые могут возникнуть во время выполнения программы, предотвращая сбои и предоставляя пользователям информативные сообщения. Это руководство рассматривает основные концепции обработки исключений в Python.

Содержание

  1. try…except
  2. raise Exception
  3. try…finally
  4. Общие встроенные исключения
  5. Создание пользовательских исключений

1. try…except

Блок try...except является основой обработки исключений. Код, который может вызвать исключение, помещается внутри блока try. Если возникает исключение, выполняется соответствующий блок except.


try:
    result = 10 / 0  # Это вызовет ZeroDivisionError
except ZeroDivisionError:
    print("Ошибка: Деление на ноль!")
except TypeError:
    print("Ошибка: Несоответствие типов")
except Exception as e:  # Перехватывает любые другие исключения
    print(f"Произошла непредвиденная ошибка: {e}")
else:  # Необязательный блок else, выполняется, если исключение не возникает
    print(f"Результат: {result}")
finally:  # Необязательный блок finally, всегда выполняется
    print("Этот блок всегда выполняется.")

В этом примере показана обработка ZeroDivisionError. Несколько блоков except могут обрабатывать разные типы исключений. Необязательный блок else выполняется только в том случае, если в блоке try не возникает исключений. Блок finally, также необязательный, всегда выполняется, что идеально подходит для задач очистки, таких как закрытие файлов.

2. raise Exception

Оператор raise позволяет явно вызывать исключения, сигнализируя об ошибках или исключительных ситуациях.


def validate_age(age):
    if age < 0:
        raise ValueError("Возраст не может быть отрицательным")
    elif age > 120:
        raise ValueError("Возраст нереально высок")
    return age

try:
    age = validate_age(-5)
    print(f"Допустимый возраст: {age}")
except ValueError as e:
    print(f"Ошибка: {e}")

Здесь функция validate_age вызывает ValueError, если возраст недопустим. Можно вызывать любые встроенные исключения или создавать собственные (классы, наследующие от Exception).

3. try…finally

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


file = None
try:
    file = open("my_file.txt", "r")
    content = file.read()
    print(content)
except FileNotFoundError:
    print("Файл не найден!")
finally:
    if file:
        file.close()
    print("Файл закрыт.")

Это гарантирует, что файл будет закрыт даже если произойдет FileNotFoundError, предотвращая утечки ресурсов.

4. Общие встроенные исключения

Python предлагает множество встроенных исключений:

  • ZeroDivisionError: Деление на ноль.
  • TypeError: Неподходящий тип для операции.
  • ValueError: Правильный тип, но неподходящее значение.
  • FileNotFoundError: Файл не найден.
  • IndexError: Индекс за пределами диапазона.
  • KeyError: Ключ не найден в словаре.
  • ImportError: Ошибка импорта.
  • NameError: Имя не найдено.

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

Для более точной обработки ошибок создайте пользовательские исключения, наследуя класс Exception:


class InvalidInputError(Exception):
    pass

def process_data(data):
    if not data:
        raise InvalidInputError("Данные не могут быть пустыми")
    # ...остальная обработка данных...

try:
    process_data("")
except InvalidInputError as e:
    print(f"Пользовательская ошибка: {e}")

Это позволяет более детально обрабатывать ошибки и улучшает читаемость кода.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *