Эта статья участвует в "Месяце тем 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
恭喜! 你猜对了
Итак, вы можете видеть, что в этой программе мы определяем базовый класс с именем 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) Следуйте за мной, чтобы увидеть больше информации, вот сводка всего моего оригинального и исходного кода
🧵 Другие статьи по теме
- Учебное пособие по многопоточности Python | Месяц темы Python
- Основы программирования сокетов Python|Месяц тем Python
- 30 руководств и советов по Python | Месяц тем Python
- Операторы Python, выражения и отступы | Месяц тем Python
- Ключевые слова Python, идентификаторы и переменные | Месяц темы Python
- Как писать комментарии и многострочные комментарии в Python | Месяц тем Python
- Типы данных Python — от базового до углубленного обучения | Месяц тем Python
Рекомендуемые статьи из прошлого:
- 20 советов по Python, которые должен знать каждый | Месяц тем Python
- 100 основных вопросов для интервью по Python, часть 1 (1–20) | Месяц тем Python
- 100 основных вопросов для интервью по Python, часть 2 (21–40) | Месяц тем Python
- 100 основных вопросов для интервью по Python, часть 3 (41–60) | Месяц темы Python
- 100 основных вопросов для интервью по Python, часть 4 (61–80) | Месяц тем Python
- 100 основных вопросов на собеседовании по Python, часть 5 (81–100) | Месяц темы Python
Если вы действительно узнали что-то новое из этой статьи, ставьте лайк, добавляйте в закладки и делитесь с друзьями. 🤗Наконец, не забудьте поддержать ❤ или 📑