Обработка исключений Python | Месяц темы Python

задняя часть Python
Обработка исключений Python | Месяц темы Python

Эта статья участвует в "Месяце тем Python", подробнее см.Ссылка на мероприятие

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

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

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

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

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

Обработка исключений Python: ошибки и исключения

Что не так?

Ошибки — это ошибки, возникающие в программе, например синтаксические ошибки.

Это происходит во время компиляции. Давайте посмотрим на пример.

if a<5
File "<interactive input>", line 1
    if a < 5
           ^
SyntaxError: invalid syntax

Что такое исключение?

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

Как правило, когда сценарий Python сталкивается с состоянием ошибки, которое он не может обработать, он выдает исключение.

Когда сценарий Python создает исключение, он создает объект исключения.

Обычно сценарий обрабатывает исключение немедленно. Если этого не произойдет, программа завершит работу и напечатает трассировку ошибки и ее местонахождение.

>>> 1 / 0
Traceback (most recent call last):
 File "<string>", line 301, in run code
 File "<interactive input>", line 1, in <module>
ZeroDivisionError: division by zero

Как обрабатывать исключения с помощью Try-Except?

Что такое оператор Try-Except?

Мы включаем обработку исключений в программах Python с помощью операторов try-except.

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

Код для обработки или перехвата исключений помещается в предложение исключения.

Синтаксис обработки исключений Python

Ниже приведеныPython try-except-elseблочный синтаксис.

try:
	你在这里做你的操作;
	......................
except ExceptionI:
	如果有 ExceptionI,则执行此块
except ExceptionII:
	如果有 ExceptionII,则执行此块
	......................
else:
	如果没有异常则执行此块。

посмотри -30 руководств и советов по Python

Вот список допустимых операторов try Python.

  • Один оператор try может иметь несколько операторов exclude по мере необходимости. В этом случае блок try содержит операторы, которые могут генерировать различные типы исключений.
  • Мы также можем добавить общее предложение exclude, которое обрабатывает все возможные типы исключений.
  • Мы можем даже включить предложение else после предложения исключения. Если код в блоке try не вызывает исключения, будут выполняться инструкции в блоке else.

Пример обработки исключений Python

Давайте разберемся с использованием Python try-except на примере кода.

try:
   fob = open("test", "w")
   fob.write("这是我的异常处理测试文件")
except IOError:
   print 
   "错误:找不到文件或读取数据"
else:
   print 
   "对文件执行写操作成功"
   fob.close()

Приведенный выше код производит следующий вывод.

>>对文件执行写操作成功

Возьмем другой пример, когда мы пытаемся открыть файл в режиме ЧТЕНИЯ.

Мы выполним над ним операцию WRITE. При выполнении возникает исключение.

try:
   fob = open("test", "r")
   fob.write("这是我的测试文件,用于验证 Python 中的异常处理")
except IOError:
   print 
   "错误:找不到文件或读取数据"
else:
   print 
   "对文件执行写操作成功"

Приведенный выше код производит следующий вывод.

>>错误:找不到文件或读取数据

Обработка всех типов исключений с помощью Except

Если мы используем пустой"Кроме"пункт, то он будет перехватывать все типы исключений.

Однако это не является хорошей практикой программирования, и никто ее не рекомендует.

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

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

пример

try:
   你在这里做你的操作;
   ......................
except:
   如果有任何异常,则执行此块
   ......................
else:
   如果没有异常则执行此块

Обработка нескольких исключений с помощью exclude

Мы можем определить несколько исключений, используя одно и то же предложение exclude. Это означает, что если интерпретатор Python найдет соответствующее исключение, он выполнит код, написанный в предложении exclude.

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

См. приведенный ниже пример.

пример

try:
   你在这里做你的操作;
   ......................
except(Exception1[, Exception2[,...ExceptionN]]]):
   如果给定的异常列表中有任何异常,
   然后执行这个块
   ......................
else:
   如果没有异常则执行此块

Как обрабатывать исключения с помощью Try-Finally?

Что такое оператор Try-Finally?

Мы также можем включить обработку исключений Python с помощью операторов try-finally.

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

Эта функциональность обычно возникает при освобождении внешнего ресурса.

Вот фрагмент кода, чтобы помочь.

try:
   你在这里做你的操作;
   ......................
   由于任何异常,这可能会被跳过
finally:
   这将始终被执行
   ......................

пример

Ключевым моментом является то, что мы можем определить "except "или" finally" пункт. Вы не можете ставить их вместе. Также вы не должны ставить "else"пункт и"finally"пункт вместе.

Возьмем пример, чтобы было понятнее.

try:
    fob = open('test', 'w')
    fob.write("这是我在异常处理中验证 try-finally 的测试文件")
    print 'try 块执行'
finally:
    fob.close()
    print 'finally 块执行'

Если исключения не произошло, вы увидите следующий вывод.

>>try 块执行
>>finally 块执行

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

try:
    fob = open('test', 'r')
    try:
        fob.write("这是我在异常处理中验证 try-finally 的测试文件")
        print 'try 块执行'
    finally:
        fob.close()
        print 'finally 块执行以关闭文件'
except IOError:
    print "错误:找不到文件或读取数据"

В этом случае интерпретатор выдаст исключение со следующим выводом.

>>finally 块执行以关闭文件
>>错误:找不到文件或读取数据

Когда какой-то код вызывает исключение в блоке try, выполнение немедленно передается "finally "кусок." finallyПосле того, как все операторы в «блоке» выполнены, исключение возвращается к «except"Блок выполняется. Но должно быть"try-except" заявление на следующем более высоком уровне.

генерировать исключение с параметром

Что такое лифт?

Мы можем вызвать исключение, используя ключевое слово raise.

Мы также можем дополнительно передать значение исключению и указать, почему это произошло.

синтаксис повышения

Это звонит"raise"Синтаксис метода.

raise [Exception [, args [, traceback]]]

Где,

  • существует "Exception” - укажите его название.
  • "args" является необязательным и представляет собой значение параметра исключения.
  • последний параметр"проследить"Также необязательный, если он присутствует, объект трассировки, используемый для исключения.

Давайте возьмем пример, чтобы продемонстрировать это.

Пример аннотации

>>> raise MemoryError
Traceback (most recent call last):
...
MemoryError
 
>>> raise MemoryError("This is an argument")
Traceback (most recent call last):
...
MemoryError: This is an argument
 
 
>>> try:
      a = int(input("Enter a positive integer value: "))
     if a <= 0:
            raise ValueError("This is not a positive number!!")
    except ValueError as ve:
      print(ve)
 
 
Following Output is displayed if we enter a negative number:
  
Enter a positive integer: –5
 
This is not a positive number!!

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

Что такое пользовательское исключение?

Пользовательское исключение — это исключение, созданное самим программистом.

Он делает это, добавляя новый класс. Хитрость здесь заключается в том, чтобы получить собственный класс исключений из базового класса исключений.

Большинство встроенных исключений также имеют соответствующие классы.

Создание классов исключений в Python

>>> class UserDefinedError(Exception):
...     pass
 
>>> raise UserDefinedError
Traceback (most recent call last):
...
__main__.UserDefinedError
 
>>> raise UserDefinedError("An error occurred")
Traceback (most recent call last):
...
__main__.UserDefinedError: An error occurred

В приведенном выше фрагменте кода вы можете видеть, что мы создали определяемый пользователем класс исключений:UserDefinedError". Он использует базовый класс Exception в качестве родительского класса. Следовательно, новый пользовательский класс исключений будет генерировать исключения, как и любой другой класс исключений, т. е. путем вызова " с необязательным сообщением об ошибке.raise" утверждение.

Возьмем пример.

пример

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

Программа предлагает пользователю вводить алфавит снова и снова, пока он не введет только сохраненный алфавит.

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

#定义 Python 用户定义的异常
class Error(Exception):
   """Base class for other exceptions"""
   pass
 
class InputTooSmallError(Error):
   """Raised when the entered alpahbet is smaller than the actual one"""
   pass
 
class InputTooLargeError(Error):
   """Raised when the entered alpahbet is larger than the actual one"""
   pass

#我们的主程序
#用户猜测一个字母,直到他/她猜对了
 
#你需要猜这个字母
alphabet = 'm'
 
while True:
   try:
       apb =  input("输入一个字母: ")
       if apb < alphabet:
           raise InputTooSmallError
       elif apb > alphabet:
           raise InputTooLargeError
       break
   except InputTooSmallError:
       print("输入的字母太小,再试一遍!")
       print('')
   except InputTooLargeError:
       print("输入的字母太大,再试一遍!")
       print('')
 
print("恭喜! 你猜对了")

Давайте протестируем эту программу, предоставив различные входные данные.

输入一个字母:c
输入的字母太小,再试一遍!

输入一个字母:s
输入的字母太大,再试一遍!

输入一个字母:q
输入的字母太大,再试一遍!

输入一个字母:k
输入的字母太小,再试一遍!

输入一个字母:m
恭喜! 你猜对了

image.png

Итак, вы можете видеть, что в этой программе мы определяем базовый класс с именем Error. Он выдает два исключения, производные от базового класса ("InputTooSmallError "и" InputTooLargeError"). Это стандартный способ определения определяемых пользователем исключений в программировании на Python.

Встроенные исключения Python

Exception неправильная причина
AirthmeticError Ошибки в численных расчетах
AssertionError Когда оператор assert терпит неудачу
AttributeError При сбое присвоения свойства или ссылки
EOFError Если нет ввода или указатель файла находится в EOF
Exception Это базовый класс для всех исключений.
EnvironmentError Для ошибок, возникающих за пределами среды Python.
FloatingPointError Происходит при сбое операции с плавающей запятой.
GeneratorExit Если вызывается метод генератора .
ImportError Происходит, когда импортированный модуль недоступен.
IOError Если операция ввода/вывода не удалась.
IndexError Когда индекс последовательности выходит за пределы допустимого диапазона.
KeyError Если указанный ключ недоступен в словаре.
KeyboardInterrupt Когда пользователь нажимает клавишу «Перерыв» (CTRL + C или удалить).
MemoryError Если оперативной памяти недостаточно.
NameError Когда переменная недоступна в локальной или глобальной области.
NotImplementedError Если абстрактный метод недоступен.
OSError При сбое в работе системы.
OverflowError Происходит, когда результат арифметической операции выходит за допустимые пределы.
ReferenceError Когда прокси-сервер со слабой ссылкой обращается к ссылке со сборкой мусора.
RuntimeError Если сгенерированная ошибка не попадает ни в одну категорию.
StandardError Это базовый класс для всех встроенных исключений, кроме и .
StopIteration Функция не имеет других возвращаемых элементов.
SyntaxError Для ошибок в синтаксисе Python.
IndentationError Бывает, если отступ неправильный.
TabError Используется для несовместимых вкладок и пробелов.
SystemError Когда интерпретатор обнаруживает внутреннюю ошибку.
SystemExit Вызывается функцией .
TypeError Когда функция использует объект неправильного типа.
UnboundLocalError Если выполняется код, использующий неназначенную ссылку.
UnicodeError Используется для ошибок кодирования или декодирования Unicode.
ValueError Когда функция получает недопустимое значение.
ZeroDivisionError Если второй операнд операции деления или по модулю равен нулю.

Резюме — концепции обработки исключений Python

В большинстве случаев моя цель — найти тему, которая может помочь читателям в работе. Вот почему мы представляем эту статью об обработке исключений в Python. Если вам понравилась эта статья и вы хотите увидеть больше, вы можете прочитать ее здесь (Github/Gitee) Следуйте за мной, чтобы увидеть больше информации, вот сводка всего моего оригинального и исходного кода

🧵 Другие статьи по теме

Рекомендуемые статьи из прошлого:

Если вы действительно узнали что-то новое из этой статьи, ставьте лайк, добавляйте в закладки и делитесь с друзьями. 🤗Наконец, не забудьте поддержать ❤ или 📑