Python предоставляет две очень важные функции для обработки любых непредвиденных ошибок в ваших программах на Python и добавления в них возможностей отладки —
-
Обработка исключений — это будет описано в этом руководстве. Вот список стандартных исключений, доступных в Python — Стандартные исключения .
-
Утверждения — это будет описано в руководстве по утверждениям в Python 3 .
Обработка исключений — это будет описано в этом руководстве. Вот список стандартных исключений, доступных в Python — Стандартные исключения .
Утверждения — это будет описано в руководстве по утверждениям в Python 3 .
Стандартные исключения
Вот список стандартных исключений, доступных в Python. —
Sr.No. | Название и описание исключения |
---|---|
1 |
исключение Базовый класс для всех исключений |
2 |
StopIteration Возникает, когда метод next () итератора не указывает ни на один объект. |
3 |
SystemExit Вызывается функцией sys.exit (). |
4 |
Стандартная ошибка Базовый класс для всех встроенных исключений, кроме StopIteration и SystemExit. |
5 |
ArithmeticError Базовый класс для всех ошибок, возникающих при численном расчете. |
6 |
OverflowError Возникает, когда расчет превышает максимальный предел для числового типа. |
7 |
FloatingPointError Возникает, когда вычисление с плавающей запятой завершается неудачно. |
8 |
ZeroDivisonError Возникает, когда деление или деление на ноль происходит для всех числовых типов. |
9 |
AssertionError Вызывается в случае сбоя утверждения Assert. |
10 |
AttributeError Возникает в случае сбоя ссылки на атрибут или присвоения. |
11 |
EOFError Возникает, когда нет ввода ни от функции raw_input (), ни от input () и достигнут конец файла. |
12 |
ImportError Возникает при сбое оператора импорта. |
13 |
KeyboardInterrupt Возникает, когда пользователь прерывает выполнение программы, обычно нажатием Ctrl + c. |
14 |
LookupError Базовый класс для всех ошибок поиска. |
15 |
IndexError Возникает, когда индекс не найден в последовательности. |
16 |
KeyError Возникает, когда указанный ключ не найден в словаре. |
17 |
NameError Возникает, когда идентификатор не найден в локальном или глобальном пространстве имен. |
18 |
UnboundLocalError Возникает при попытке доступа к локальной переменной в функции или методе, но ей не присвоено значение. |
19 |
EnvironmentError Базовый класс для всех исключений, которые происходят вне среды Python. |
20 |
IOError Возникает при сбое операции ввода / вывода, такой как оператор print или функция open (), при попытке открыть файл, который не существует. |
21 |
OSError Вызывается для ошибок, связанных с операционной системой. |
22 |
Ошибка синтаксиса Возникает при возникновении ошибки в синтаксисе Python. |
23 |
IndentationError Поднимается, если отступ не указан правильно. |
24 |
Системная ошибка Возникает, когда интерпретатор обнаруживает внутреннюю проблему, но при обнаружении этой ошибки интерпретатор Python не завершается. |
25 |
SystemExit Возникает при выходе из интерпретатора Python с помощью функции sys.exit (). Если не обрабатывается в коде, интерпретатор завершает работу. |
26 |
TypeError Вызывается при попытке выполнить операцию или функцию, которая недопустима для указанного типа данных. |
27 |
ValueError Возникает, когда встроенная функция для типа данных имеет допустимый тип аргументов, но для аргументов указаны недопустимые значения. |
28 |
Ошибка выполнения Возникает, когда сгенерированная ошибка не попадает ни в одну категорию. |
29 |
NotImplementedError Возникает, когда абстрактный метод, который должен быть реализован в унаследованном классе, фактически не реализован. |
исключение
Базовый класс для всех исключений
StopIteration
Возникает, когда метод next () итератора не указывает ни на один объект.
SystemExit
Вызывается функцией sys.exit ().
Стандартная ошибка
Базовый класс для всех встроенных исключений, кроме StopIteration и SystemExit.
ArithmeticError
Базовый класс для всех ошибок, возникающих при численном расчете.
OverflowError
Возникает, когда расчет превышает максимальный предел для числового типа.
FloatingPointError
Возникает, когда вычисление с плавающей запятой завершается неудачно.
ZeroDivisonError
Возникает, когда деление или деление на ноль происходит для всех числовых типов.
AssertionError
Вызывается в случае сбоя утверждения Assert.
AttributeError
Возникает в случае сбоя ссылки на атрибут или присвоения.
EOFError
Возникает, когда нет ввода ни от функции raw_input (), ни от input () и достигнут конец файла.
ImportError
Возникает при сбое оператора импорта.
KeyboardInterrupt
Возникает, когда пользователь прерывает выполнение программы, обычно нажатием Ctrl + c.
LookupError
Базовый класс для всех ошибок поиска.
IndexError
Возникает, когда индекс не найден в последовательности.
KeyError
Возникает, когда указанный ключ не найден в словаре.
NameError
Возникает, когда идентификатор не найден в локальном или глобальном пространстве имен.
UnboundLocalError
Возникает при попытке доступа к локальной переменной в функции или методе, но ей не присвоено значение.
EnvironmentError
Базовый класс для всех исключений, которые происходят вне среды Python.
IOError
Возникает при сбое операции ввода / вывода, такой как оператор print или функция open (), при попытке открыть файл, который не существует.
OSError
Вызывается для ошибок, связанных с операционной системой.
Ошибка синтаксиса
Возникает при возникновении ошибки в синтаксисе Python.
IndentationError
Поднимается, если отступ не указан правильно.
Системная ошибка
Возникает, когда интерпретатор обнаруживает внутреннюю проблему, но при обнаружении этой ошибки интерпретатор Python не завершается.
SystemExit
Возникает при выходе из интерпретатора Python с помощью функции sys.exit (). Если не обрабатывается в коде, интерпретатор завершает работу.
TypeError
Вызывается при попытке выполнить операцию или функцию, которая недопустима для указанного типа данных.
ValueError
Возникает, когда встроенная функция для типа данных имеет допустимый тип аргументов, но для аргументов указаны недопустимые значения.
Ошибка выполнения
Возникает, когда сгенерированная ошибка не попадает ни в одну категорию.
NotImplementedError
Возникает, когда абстрактный метод, который должен быть реализован в унаследованном классе, фактически не реализован.
Утверждения в Python
Утверждение — это проверка работоспособности, которую вы можете включить или отключить, когда закончите тестирование программы.
-
Самый простой способ подумать об утверждении — это сравнить его с утверждением « повышать, если» (или, если быть более точным, с утверждением «повышать, если не делать»). Выражение проверяется, и если в результате получается ложное, возникает исключение.
-
Утверждения выполняются оператором assert, новейшим ключевым словом Python, представленным в версии 1.5.
-
Программисты часто помещают утверждения в начале функции для проверки правильности ввода и после вызова функции для проверки правильности вывода.
Самый простой способ подумать об утверждении — это сравнить его с утверждением « повышать, если» (или, если быть более точным, с утверждением «повышать, если не делать»). Выражение проверяется, и если в результате получается ложное, возникает исключение.
Утверждения выполняются оператором assert, новейшим ключевым словом Python, представленным в версии 1.5.
Программисты часто помещают утверждения в начале функции для проверки правильности ввода и после вызова функции для проверки правильности вывода.
Утверждение утверждения
Когда он встречает утверждение assert, Python оценивает сопровождающее выражение, которое, как мы надеемся, истинно. Если выражение ложно, Python вызывает исключение AssertionError .
Синтаксис для assert —
assert Expression[, Arguments]
Если утверждение не выполняется, Python использует ArgumentExpression в качестве аргумента для AssertionError. Исключения AssertionError могут быть перехвачены и обработаны, как и любое другое исключение, с помощью оператора try-exc. Если они не обрабатываются, они завершат программу и произведут трассировку.
пример
Вот функция, которая преобразует заданную температуру из градусов Кельвина в градусы Фаренгейта. Поскольку 0 ° K настолько холодный, насколько это возможно, функция отключается, если видит отрицательную температуру —
#!/usr/bin/python3 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: включите оператор exc:, а затем блок кода, который обрабатывает проблему максимально элегантно.
Синтаксис
Вот простой синтаксис try …. кроме … 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 может быть несколько операторов, кроме. Это полезно, когда блок try содержит операторы, которые могут выдавать различные типы исключений.
-
Вы также можете предоставить универсальный исключающий пункт, который обрабатывает любое исключение.
-
После предложения (й) исключений вы можете включить предложение else. Код в блоке else выполняется, если код в блоке try: не вызывает исключение.
-
Блок else — это хорошее место для кода, который не нуждается в защите try: block.
У одного оператора try может быть несколько операторов, кроме. Это полезно, когда блок try содержит операторы, которые могут выдавать различные типы исключений.
Вы также можете предоставить универсальный исключающий пункт, который обрабатывает любое исключение.
После предложения (й) исключений вы можете включить предложение else. Код в блоке else выполняется, если код в блоке try: не вызывает исключение.
Блок else — это хорошее место для кода, который не нуждается в защите try: block.
пример
Этот пример открывает файл, записывает содержимое в файл, и изящно выходит, потому что нет никаких проблем —
#!/usr/bin/python3 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/python3 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
Исключая оговорку без исключений
Вы также можете использовать оператор исключения без исключений, определенных следующим образом:
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-Кроме перехватывает все возникающие исключения. Однако использование этого типа оператора try-exception не считается хорошей практикой программирования, поскольку оно перехватывает все исключения, но не заставляет программиста определить причину проблемы, которая может возникнуть.
Исключая оговорку с несколькими исключениями
Вы также можете использовать тот же оператор кроме для обработки нескольких исключений следующим образом:
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.
Попробуй окончательно
Вы можете использовать блок 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. ......................
Примечание. Вы можете указать только пункт (ы) или пункт finally, но не оба. Вы не можете использовать предложение else вместе с предложением finally.
пример
#!/usr/bin/python3 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") fh.close()
Если у вас нет разрешения на открытие файла в режиме записи, это приведет к следующему результату:
Error: can't find file or read data
Тот же пример можно написать более четко следующим образом:
#!/usr/bin/python3 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")
Это дает следующий результат —
Going to close the file
Когда в блоке try создается исключение, выполнение немедленно передается блоку finally . После того, как все операторы в блоке finally выполнены, исключение вызывается снова и обрабатывается в операторах исключения, если оно присутствует на следующем более высоком уровне оператора try- exc.
Аргумент Исключения
Исключение может иметь аргумент , который является значением, дающим дополнительную информацию о проблеме. Содержание аргумента варьируется в зависимости от исключения. Вы фиксируете аргумент исключения, предоставляя переменную в предложении exc следующим образом:
try: You do your operations here ...................... except ExceptionType as Argument: You can print value of Argument here...
Если вы напишите код для обработки одного исключения, вы можете иметь переменную, следующую за именем исключения в операторе исключения. Если вы перехватываете несколько исключений, у вас может быть переменная, следующая за кортежем исключения.
Эта переменная получает значение исключения, в основном содержащее причину исключения. Переменная может принимать одно или несколько значений в виде кортежа. Этот кортеж обычно содержит строку ошибки, номер ошибки и местоположение ошибки.
пример
Ниже приведен пример для одного исключения —
#!/usr/bin/python3 # Define a function here. def temp_convert(var): try: return int(var) except ValueError as 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 [Exception [, args [, traceback]]]
Здесь Exception — это тип исключения (например, NameError), а аргумент — это значение для аргумента исключения. Аргумент необязательный; если не указан, аргумент исключения — None.
Последний аргумент, traceback, также является необязательным (и редко используется на практике) и, если присутствует, является объектом трассировки, используемым для исключения.
пример
Исключением может быть строка, класс или объект. Большинство исключений, которые вызывает ядро Python, являются классами с аргументом, который является экземпляром класса. Определение новых исключений довольно просто и может быть сделано следующим образом:
def functionName( level ): if level <1: raise Exception(level) # The code below to this would not be executed # if we raise the exception return level
Примечание. Чтобы перехватить исключение, предложение «кроме» должно ссылаться на то же исключение, выбрасываемое либо как объект класса, либо как простая строка. Например, чтобы перехватить вышеупомянутое исключение, мы должны написать предложение исключение следующим образом:
try: Business Logic here... except Exception as e: Exception handling here using e.args... else: Rest of the code here...
Следующий пример иллюстрирует использование возбуждения исключения —
#!/usr/bin/python3 def functionName( level ): if level <1: raise Exception(level) # The code below to this would not be executed # if we raise the exception return level try: l = functionName(-10) print ("level = ",l) except Exception as e: print ("error in level argument",e.args[0])
Это даст следующий результат
error in level argument -10
Определяемые пользователем исключения
Python также позволяет вам создавать свои собственные исключения, выводя классы из стандартных встроенных исключений.
Вот пример, связанный с RuntimeError . Здесь создается класс, который наследуется от RuntimeError . Это полезно, когда вам нужно отобразить более конкретную информацию при обнаружении исключения.
В блоке try определенное пользователем исключение возникает и перехватывается в блоке exc. Переменная e используется для создания экземпляра класса Networkerror .
class Networkerror(RuntimeError): def __init__(self, arg): self.args = arg
Поэтому, как только вы определили вышеприведенный класс, вы можете вызвать исключение следующим образом: