Как проверить, было ли вызвано исключение в Python

PythonPythonBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь проверять, было ли возбуждено исключение в Python. Лабораторная работа сосредоточена на понимании исключений и использовании блоков try-except для перехвата и обработки их, предотвращая аварийное завершение программы.

Вы начнете с создания Python-скрипта, который возбуждает исключение ZeroDivisionError. Затем вы научитесь использовать блок try-except для перехвата этого исключения и его корректной обработки, что позволит вашей программе продолжать работу.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ErrorandExceptionHandlingGroup(["Error and Exception Handling"]) python/ErrorandExceptionHandlingGroup -.-> python/catching_exceptions("Catching Exceptions") python/ErrorandExceptionHandlingGroup -.-> python/raising_exceptions("Raising Exceptions") subgraph Lab Skills python/catching_exceptions -.-> lab-559611{{"Как проверить, было ли вызвано исключение в Python"}} python/raising_exceptions -.-> lab-559611{{"Как проверить, было ли вызвано исключение в Python"}} end

Понимание исключений

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

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

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

  1. Откройте редактор VS Code в среде LabEx.

  2. Создайте новый файл с именем division.py в директории ~/project.

    ~/project/division.py
  3. Добавьте следующий код в файл division.py:

    numerator = 10
    denominator = 0
    result = numerator / denominator
    print(result)

    Этот код пытается разделить 10 на 0, что является недопустимой операцией и вызовет исключение ZeroDivisionError.

  4. Запустите скрипт, используя следующую команду в терминале:

    python division.py

    Вы увидите вывод, похожий на следующий:

    Traceback (most recent call last):
      File "/home/labex/project/division.py", line 3, in <module>
        result = numerator / denominator
    ZeroDivisionError: division by zero

    Трассировка стека показывает, что исключение ZeroDivisionError произошло на строке 3 файла division.py. Программа завершилась, так как исключение не было обработано.

Теперь давайте посмотрим, как обработать это исключение с использованием блока try-except.

Использование конструкции try-except для перехвата исключений

На этом этапе вы научитесь использовать блоки try-except для перехвата и обработки исключений в Python. Это позволяет вашей программе продолжать работу даже при возникновении ошибок.

Базовая структура блока try-except выглядит следующим образом:

try:
    ## Code that might raise an exception
except ExceptionType:
    ## Code to handle the exception

Код внутри блока try выполняется. Если возникает исключение типа ExceptionType, то выполняется код внутри блока except. Если исключение не возникает, блок except пропускается.

Давайте модифицируем файл division.py из предыдущего шага, чтобы обработать исключение ZeroDivisionError:

  1. Откройте файл division.py в редакторе VS Code.

  2. Измените код, добавив блок try-except:

    try:
        numerator = 10
        denominator = 0
        result = numerator / denominator
        print(result)
    except ZeroDivisionError:
        print("Error: Cannot divide by zero.")

    В этом коде блок try содержит операцию деления, которая может вызвать исключение ZeroDivisionError. Блок except перехватывает исключение ZeroDivisionError и выводит сообщение об ошибке.

  3. Запустите скрипт, используя следующую команду в терминале:

    python division.py

    Вы увидите следующий вывод:

    Error: Cannot divide by zero.

    Вместо аварийного завершения программа теперь корректно обрабатывает исключение ZeroDivisionError и выводит информативное сообщение.

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

Проверка типа исключения

На этом этапе вы узнаете, как проверить тип исключения и получить доступ к сообщению об исключении внутри блока except. Это позволяет обрабатывать разные типы исключений по-разному и выводить более информативные сообщения об ошибках.

Когда исключение перехвачено, вы можете присвоить его переменной в предложении except с использованием ключевого слова as:

try:
    ## Code that might raise an exception
except ExceptionType as e:
    ## Code to handle the exception
    ## 'e' is the exception object

Переменная e будет содержать объект исключения, который можно использовать для получения информации об исключении, например, его типа и сообщения.

Давайте модифицируем файл division.py, чтобы проверить тип исключения и вывести сообщение об исключении:

  1. Откройте файл division.py в редакторе VS Code.

  2. Измените код, чтобы проверить тип исключения и вывести сообщение:

    try:
        numerator = 10
        denominator = 0
        result = numerator / denominator
        print(result)
    except ZeroDivisionError as e:
        print(f"Error: {type(e).__name__} - {e}")

    В этом коде мы перехватываем исключение ZeroDivisionError и присваиваем его переменной e. Затем мы используем type(e).__name__ для получения имени типа исключения и e для получения сообщения об исключении. Мы выводим оба значения в отформатированной строке.

  3. Запустите скрипт, используя следующую команду в терминале:

    python division.py

    Вы увидите следующий вывод:

    Error: ZeroDivisionError - division by zero

    Теперь вывод содержит тип исключения (ZeroDivisionError) и сообщение об исключении (division by zero).

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

Резюме

В этом практическом занятии (лабораторной работе) вы узнали о исключениях в Python, которые представляют собой события, нарушающие нормальный поток выполнения программы. Когда возникает ошибка, генерируется исключение, и если оно не обрабатывается, программа завершается аварийно.

Вы также научились использовать блоки try-except для перехвата и обработки исключений, предотвращая аварийное завершение программы. В практическом занятии был продемонстрирован случай исключения ZeroDivisionError и способ его обработки с помощью блока try-except.