Python — обработка исключений
Предыдущая страницаСледующая страница
Python предоставляет две очень важные функции для обработки любых непредвиденных ошибок в ваших программах на Python и для добавления в них возможностей отладки —
-
Обработка исключений − Это будет рассмотрено в этом уроке. Вот список стандартных исключений, доступных в Python:Стандартные исключения.
-
Утверждения − Это будет рассмотрено в учебнике «Утверждения в Python».
Список стандартных исключений —
Серийный номер | Имя и описание исключения |
---|---|
1 | <тд>|
2 | <тд>|
3 | <тд>|
4 | <тд>|
5 | <тд>|
6 | <тд>|
7 | <тд>|
8 | <тд>|
9 | <тд>|
10 | <тд>|
11 | <тд>|
12 | <тд>|
13 | <тд>|
14 | <тд>|
15 | <тд>|
16 | <тд>|
17 | <тд>|
18 | <тд>|
19 | <тд>|
20 | <тд>|
21 | <тд>|
22 | <тд>|
23 | <тд>|
24 | <тд>|
25 | <тд>|
26 | <тд>|
27 | <тд>|
28 | <тд>|
29 | <тд>
Утверждения в Python
Утверждение — это проверка работоспособности, которую вы можете включить или отключить, когда закончите тестирование программы.
Самый простой способ думать об утверждении — сравнить его с поднять-если. утверждение (или, если быть более точным, заявление о повышении, если нет). Выражение проверяется, и если результат оказывается ложным, возникает исключение.
Утверждения выполняются оператором assert, новейшим ключевым словом Python, представленным в версии 1.5.
Программисты часто размещают утверждения в начале функции для проверки правильности ввода и после вызова функции для проверки правильности вывода.
Утверждение Заявление
Когда он встречает оператор assert, Python оценивает сопровождающее его выражение, которое, как мы надеемся, верно. Если выражение ложно, Python выдает ошибку AssertionError. исключение.
Синтаксис для утверждения —
assert Expression[, Arguments]
Если утверждение не выполняется, Python использует ArgumentExpression в качестве аргумента для AssertionError. Исключения AssertionError можно перехватить и обработать, как и любое другое исключение, с помощью инструкции try-except, но если их не обработать, программа завершится и будет выполнена трассировка.
Пример
Вот функция, которая переводит температуру из градусов Кельвина в градусы Фаренгейта. Так как ноль градусов Кельвина настолько холоден, насколько это возможно, функция отключается, если она видит отрицательную температуру —
Живая демонстрация#!/usr/bin/python def KelvinToFahrenheit(Temperature): assert (Temperature >= 0),"Colder than absolute zero!" return ((Temperature-273)*1.8)+32 print KelvinToFahrenheit(273) print int(KelvinToFahrenheit(505.78)) print KelvinToFahrenheit(-5)
Когда приведенный выше код выполняется, он дает следующий результат —
32.0 451 Traceback (most recent call last): File "test.py", line 9, in <module> print KelvinToFahrenheit(-5) File "test.py", line 4, in KelvinToFahrenheit assert (Temperature >= 0),"Colder than absolute zero!" AssertionError: Colder than absolute zero!
Что такое исключение?
Исключением является событие, происходящее во время выполнения программы, которое нарушает нормальный ход инструкций программы. В общем, когда скрипт Python сталкивается с ситуацией, с которой он не может справиться, он вызывает исключение. Исключением является объект Python, представляющий ошибку.
Когда скрипт Python вызывает исключение, он должен либо немедленно обработать исключение, либо завершить работу и завершить работу.
Обработка исключения
Если у вас есть подозрительные кода, который может вызвать исключение, вы можете защитить свою программу, поместив подозрительный код в try: блокировать. После блока try:включите except: оператор, за которым следует блок кода, максимально элегантно решающий проблему.
Синтаксис
Вот простой синтаксис try....except...else блоки —
try: You do your operations here; ...................... except ExceptionI: If there is ExceptionI, then execute this block. except ExceptionII: If there is ExceptionII, then execute this block. ...................... else: If there is no exception then execute this block.
Вот несколько важных моментов о вышеупомянутом синтаксисе —
-
Один оператор try может иметь несколько операторов exclude. Это полезно, когда блок try содержит операторы, которые могут генерировать различные типы исключений.
-
Вы также можете предоставить общее исключение, которое обрабатывает любое исключение.
-
После пункта(ов) exclude вы можете включить пункт else. Код в блоке else выполняется, если код в блоке try:не вызывает исключения.
-
Блок else — хорошее место для кода, который не нуждается в защите блока try:.
Пример
Этот пример открывает файл, записывает содержимое в файл и выходит изящно, потому что нет никаких проблем —
Живая демонстрация#!/usr/bin/python try: fh = open("testfile", "w") fh.write("This is my test file for exception handling!!") except IOError: print "Error: can\'t find file or read data" else: print "Written content in the file successfully" fh.close()
Это дает следующий результат —
Written content in the file successfully
Пример
В этом примере делается попытка открыть файл, для которого у вас нет прав на запись, поэтому возникает исключение —
Живая демонстрация#!/usr/bin/python try: fh = open("testfile", "r") fh.write("This is my test file for exception handling!!") except IOError: print "Error: can\'t find file or read data" else: print "Written content in the file successfully"
Это дает следующий результат —
Error: can't find file or read data
кроме Пункт без исключений
Вы также можете использовать оператор exclude без исключений, определенных следующим образом —
try: You do your operations here; ...................... except: If there is any exception, then execute this block. ...................... else: If there is no exception then execute this block.
Этот вид попробовать-исключить Оператор перехватывает все возникающие исключения. Однако использование такого оператора try-except не считается хорошей практикой программирования, поскольку он перехватывает все исключения, но не заставляет программиста определять основную причину проблемы, которая может возникнуть.
кроме Пункт с несколькими исключениями
Вы также можете использовать тот же кроме оператор для обработки нескольких исключений следующим образом —
try: You do your operations here; ...................... except(Exception1[, Exception2[,...ExceptionN]]]): If there is any exception from the given exception list, then execute this block. ...................... else: If there is no exception then execute this block.
Предложение try-finally
Вы можете использовать finally: блокировать вместе с try: блокировать. Блок finally — это место для размещения любого кода, который должен выполняться, независимо от того, вызвало ли блок try исключение или нет. Синтаксис оператора try-finally таков —
try: You do your operations here; ...................... Due to any exception, this may be skipped. finally: This would always be executed. ......................
Вы не можете использовать else вместе с предложением finally.
Пример
Живая демонстрация#!/usr/bin/python try: fh = open("testfile", "w") fh.write("This is my test file for exception handling!!") finally: print "Error: can\'t find file or read data"
Если у вас нет разрешения на открытие файла в режиме записи, это приведет к следующему результату —
Error: can't find file or read data
Тот же пример можно записать более четко следующим образом —
Живая демонстрация#!/usr/bin/python try: fh = open("testfile", "w") try: fh.write("This is my test file for exception handling!!") finally: print "Going to close the file" fh.close() except IOError: print "Error: can\'t find file or read data"
Когда возникает исключение в try блок, выполнение сразу переходит к блоку finally блокировать. После всех утверждений в finally блок выполняется, исключение возникает снова и обрабатывается в блоке except операторы, если они присутствуют на следующем более высоком уровне try-except заявление.
Аргумент исключения
Исключение может иметь аргумент , значение, дающее дополнительную информацию о проблеме. Содержание аргумента зависит от исключения. Вы фиксируете аргумент исключения, указав переменную в предложении исключения следующим образом —
try: You do your operations here; ...................... except ExceptionType, Argument: You can print value of Argument here...
Если вы пишете код для обработки одного исключения, вы можете иметь переменную, следующую за именем исключения в операторе исключения. Если вы перехватываете несколько исключений, за кортежем исключения может следовать переменная.
Эта переменная получает значение исключения, в основном содержащее причину исключения. Переменная может принимать одно значение или несколько значений в виде кортежа. Этот кортеж обычно содержит строку ошибки, номер ошибки и местоположение ошибки.
Пример
Ниже приведен пример для одного исключения —
Живая демонстрация#!/usr/bin/python # Define a function here. def temp_convert(var): try: return int(var) except ValueError, Argument: print "The argument does not contain numbers\n", Argument # Call above function here. temp_convert("xyz");
Это дает следующий результат —
The argument does not contain numbers invalid literal for int() with base 10: 'xyz'
Вызов исключений
Вы можете вызывать исключения несколькими способами, используя оператор повышения. Общий синтаксис для raise утверждение выглядит следующим образом.
Синтаксис
raise [Exception [, args [, traceback]]]
Здесь Исключение тип исключения (например, NameError) и аргумент является значением аргумента исключения. Аргумент является необязательным; если не указан, аргумент исключения равен None.
Последний аргумент, трассировка, также является необязательным (и редко используется на практике), а если он присутствует, то это объект трассировки, используемый для исключения.
Пример
Исключением может быть строка, класс или объект. Большинство исключений, которые вызывает ядро Python, являются классами с аргументом, являющимся экземпляром класса. Определить новые исключения довольно просто, и это можно сделать следующим образом:
def functionName( level ): if level < 1: raise "Invalid level!", level # The code below to this would not be executed # if we raise the exception
Примечание: Чтобы перехватить исключение, предложение «кроме» должно ссылаться на то же самое исключение, выброшенное либо на объект класса, либо на простую строку. Например, чтобы зафиксировать указанное выше исключение, мы должны написать предложение исключения следующим образом:
try: Business Logic here... except "Invalid level!": Exception handling here... else: Rest of the code here...
Пользовательские исключения
Python также позволяет создавать собственные исключения, производные классы от стандартных встроенных исключений.
Вот пример, связанный с RuntimeError . Здесь создается класс, являющийся подклассом RuntimeError. . Это полезно, когда вам нужно отобразить более конкретную информацию при обнаружении исключения.
В блоке try пользовательское исключение вызывается и перехватывается в блоке exclude. Переменная e используется для создания экземпляра класса Networkerror. .
class Networkerror(RuntimeError): def __init__(self, arg): self.args = arg
Итак, как только вы определили класс выше, вы можете вызвать исключение следующим образом:
try: raise Networkerror("Bad hostname") except Networkerror,e: print e.args
Python