Найти тему
postHack

Основы Python #8. Обработка исключений.

В последней статье , мы рассмотрели, что такое модули и как с ними работать, теперь же перейдем к обработке исключений.

Что такое исключения? Исключения это тип данных, который кстати говоря мы не рассматривали. Зачем он нужен, этот тип? Ну, разработчики python придумали его, чтобы мы знали о своих ошибках в коде.

Чему мы научимся в рамках этой статьи? Ну например, мы сделаем так, чтобы при делении на ноль, не выкидывало из программы, а просто выводило "Делить на ноль нельзя".

Вызовем любую ошибку в python и попытаемся ее проанализировать:

Сложили строку и число.
Сложили строку и число.

Сначала нам говорят, что интерпритатор нашел исключение(Traceback (most recent call last) )

File "<stdin>", line 1, in <module> - тут нам говорят где исключение. Вместо <stdin> может быть имя файла, но у меня <stdin>, ибо писал все это просто в консоль питона. Далее нам говорят, что ошибка вызвавшая исключение находится в первой строке.

TypeError: ... - тут нам говорят тип ошибки TypeError и пояснение, что мы к строке число прибавляем.

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

  • StopIteration - порождается встроенной функцией next, если в итераторе больше нет элементов.
  • ArithmeticError - арифметическая ошибка.
  • FloatingPointError - порождается при неудачном выполнении операции с плавающей запятой.
  • OverflowError - возникает, когда результат арифметической операции слишком велик для представления. Не появляется при обычной работе с целыми числами (так как python поддерживает длинные числа), но может возникать в некоторых других случаях.
  • ZeroDivisionError - деление на ноль.
  • AssertionError - выражение в функции assert ложно.
  • AttributeError - объект не имеет данного атрибута (значения или метода).
  • BufferError - операция, связанная с буфером, не может быть выполнена.
  • EOFError - функция наткнулась на конец файла и не смогла прочитать то, что хотела.
  • ImportError - не удалось импортирование модуля или его атрибута.
  • LookupError - некорректный индекс или ключ.
  • IndexError - индекс не входит в диапазон элементов.
  • KeyError - несуществующий ключ (в словаре, множестве или другом объекте).
  • MemoryError - недостаточно памяти.
  • NameError - не найдено переменной с таким именем.
  • UnboundLocalError - сделана ссылка на локальную переменную в функции, но переменная не определена ранее.
  • OSError - ошибка, связанная с системой.BlockingIOError
  • ChildProcessError - неудача при операции с дочерним процессом.
  • ConnectionError - базовый класс для исключений, связанных с подключениями.
  • FileExistsError - попытка создания файла или директории, которая уже существует.
  • FileNotFoundError - файл или директория не существует.
  • InterruptedError - системный вызов прерван входящим сигналом.
  • IsADirectoryError - ожидался файл, но это директория.
  • NotADirectoryError - ожидалась директория, но это файл.
  • PermissionError - не хватает прав доступа.
  • ProcessLookupError - указанного процесса не существует.
  • TimeoutError - закончилось время ожидания.
  • ReferenceError - попытка доступа к атрибуту со слабой ссылкой.
  • RuntimeError - возникает, когда исключение не попадает ни под одну из других категорий.
  • NotImplementedError - возникает, когда абстрактные методы класса требуют переопределения в дочерних классах.
  • SyntaxError - синтаксическая ошибка.
  • IndentationError - неправильные отступы.
  • TabError - смешивание в отступах табуляции и пробелов.
  • SystemError - внутренняя ошибка.
  • TypeError - операция применена к объекту несоответствующего типа.
  • ValueError - функция получает аргумент правильного типа, но некорректного значения.
  • UnicodeError - ошибка, связанная с кодированием / раскодированием unicode в строках.

Рассмотрим же синтаксис обработки исключений:

Все о обработке исключений.
Все о обработке исключений.

И так, обязательны в этом всем только try и except, остальное может и отсутствовать, более того мы даже можем не указать конкретную ошибку, а перехватывать все возможные, или указать несколько.

Давайте напишем простой код, который в случае сложения строки и числа, будет выводить их сумму:

Код программы и ее результат.
Код программы и ее результат.

Как мы видим, мы вводим строку а и число b, после чего их без проблем складываем.

Ну вот, как то так работает обработка исключений в Python.

@postHack

Дзен