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

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

Статью подготовили специалисты образовательного сервиса Zaochnik.

Содержание:

Чтение ошибок и их обработка

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

Traceback (most recent call last):

File " \src\debug\tserver\_sandbox.py", line 5, in <module>

File " \src\debug\tserver\_sandbox.py", line 4, in <fragment>

builtins.IOError: [Errno 2] No such file or directory: ‘A.txt’

Последняя строка сообщает о том, что произошло. Исключения обладают различными типами, которые указаны в сообщении.

Пример 1

```python

>>> 10 * (1/0)

Traceback (most recent call last):

File "<stdin>", line 1

ZeroDivisionError: integer division or modulo

>>> 4 + spam * 3

Traceback (most recent call last):

File "<stdin>", line 1

NameError: spam

>>> '2' + 2

Traceback (most recent call last):

File "<stdin>", line 1

TypeError: illegal argument type for built-in operation

```

В приведенных примерах встречаются типы исключений:

  • “ZeroDivisionError”,
  • “NameError”,
  • “TypeError”.

Имена подобных стандартных исключений - встроенные идентификаторы в Python, но они не резервируются как ключевые слова.

В подробностях сообщения указывается контекст, в котором возникло исключение, в том числе и строки из стека вызовов, исключая строки, полученные со стандартного ввода.

Обработка исключений. Инструкция try

Вы можете создать отдельные кода, которые будут отвечать за обработку конкретных исключений. Рассмотрим следующий пример, где пользователю предлагается ввести целое число до тех пор, пока это не удастся или пока программа не будет прервана (обычно с помощью Ctrl-C), что вызывает исключение `KeyboardInterrupt`.

Пример 2

```python

>>> while 1:

        try:

             x = int(input("Введите целое число: "))

             break

        except ValueError:

             print("Ошибка. Попробуйте ввести целое число еще раз:")

```

Алгоритм работы инструкции `try` выполняется следующим образом:

  1. Первым выполняется блок `try` (инструкции, расположенные между `try` и `except`).
  2. Если в процессе выполнения блока `try` не возникает исключений, выполнение переходит к завершению блока `try`, а ветвь `except` пропускается.
  3. В случае, когда во время выполнения блока `try` возникает исключение, оставшаяся часть блока игнорируется. В последующем шаге, если тип (класс) исключения эквивалентен тому, что указано за ключевым словом `except`, происходит выполнение блока `except`, и блок `try` завершает работу.
  4. В случае, когда исключение не эквивалентно указанному, происходит передача исключения внешнему блоку `try`, и если обработчик не был найден, программа завершается с выдачей сообщения об ошибке.

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

Генерация исключений. Команда raise

Команда `raise` позволяет явно вызывать исключение.

Пример 3

```python

>>> raise NameError('HiThere')

Traceback (most recent call last):

File "<stdin>", line 1

NameError: HiThere

```

В качестве аргумента `raise` должен передаваться экземпляр класса. Класс определяет тип исключения, а аргумент конструктора обычно содержит описание причины возникновения исключения.

“Страхование” от ошибок. Блок finally

Еще одним вариантом инструкции `try` является определение блока `finally`, который будет выполняться в любом случае.

Пример 4

```python

>>> try:

             raise KeyboardInterrupt()

        finally:

             print('До новых встреч!')

```

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

До новых встреч!

Traceback (most recent call last):

File "<stdin>", line 2

KeyboardInterrupt

Блок `finally` выполняется, независимо от того, возникло ли исключение в блоке `try` или нет, включая ситуации, когда выход происходит с помощью `break` или `return`.

Навигация по статьям

Выполненные работы по программированию

  • Программирование

    НИР на тему Автоматизированое рабочее места специалиста по социальной работе

    • Вид работы:

      Отчёт по практике

    • Выполнена:

      25 февраля 2020

    • Стоимость:

      1 900 руб.

    Заказать такую же работу
  • Программирование

    Обеспечение защиты информации при использовании системы электронного документооборота

    • Вид работы:

      Реферат

    • Выполнена:

      29 декабря 2019

    • Стоимость:

      500 руб.

    Заказать такую же работу
  • Программирование

    Искусственный интеллект. Достижения и перспективы развития.

    • Вид работы:

      Эссе

    • Выполнена:

      11 декабря 2019

    • Стоимость:

      800 руб.

    Заказать такую же работу
  • Программирование

    Айти. Заполнить дневник практики.

    • Вид работы:

      Отчёт по практике

    • Выполнена:

      9 декабря 2019

    • Стоимость:

      1 800 руб.

    Заказать такую же работу
  • Программирование

    Если свободное общество не сможет помочь многим бедным, оно не сможет защитить немногих богатых

    • Вид работы:

      Эссе

    • Выполнена:

      8 декабря 2019

    • Стоимость:

      1 000 руб.

    Заказать такую же работу
  • Программирование

    Двоичные деревья поиска, Организация поиска в массиве данных при помощи специальных методов поиска, Сортировка

    • Вид работы:

      Отчёт по практике

    • Выполнена:

      28 октября 2019

    • Стоимость:

      1 700 руб.

    Заказать такую же работу