Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Python

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

Предыдущая страницаСледующая страница

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

Список стандартных исключений —

<тд>

Исключение

Базовый класс для всех исключений

<тд>

Остановить итерацию

Возникает, когда метод next() итератора не указывает ни на какой объект.

<тд>

Выход из системы

Вызывается функцией sys.exit().

<тд>

Стандартная ошибка

Базовый класс для всех встроенных исключений, кроме StopIteration и SystemExit.

<тд>

Арифметическая ошибка

Базовый класс для всех ошибок, возникающих при числовых вычислениях.

<тд>

Ошибка переполнения

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

<тд>

Ошибка с плавающей запятой

Возникает при сбое вычисления с плавающей запятой.

<тд>

Ошибка деления нуля

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

<тд>

Ошибка утверждения

Возникает в случае сбоя оператора Assert.

<тд>

Ошибка атрибута

Возникает в случае сбоя ссылки или назначения атрибута.

<тд>

EOFError

Возникает, когда нет входных данных из функции raw_input() или input() и достигнут конец файла.

<тд>

Ошибка импорта

Возникает при сбое оператора импорта.

<тд>

Прерывание клавиатуры

Возникает, когда пользователь прерывает выполнение программы, обычно нажав Ctrl+c.

<тд>

Ошибка поиска

Базовый класс для всех ошибок поиска.

<тд>

Ошибка индекса

Возникает, когда индекс не найден в последовательности.

<тд>

Ошибка ключа

Возникает, когда указанный ключ не найден в словаре.

<тд>

Ошибка имени

Возникает, когда идентификатор не найден в локальном или глобальном пространстве имен.

<тд>

UnboundLocalError

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

<тд>

Ошибка среды

Базовый класс для всех исключений, возникающих за пределами среды Python.

<тд>

Ошибка ввода-вывода

Возникает при сбое операции ввода/вывода, например оператора печати или функции open() при попытке открыть несуществующий файл.

<тд>

Ошибка ввода-вывода

Возникает из-за ошибок, связанных с операционной системой.

<тд>

Синтаксическая ошибка

Возникает при наличии ошибки в синтаксисе Python.

<тд>

Ошибка отступа

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

<тд>

Системная ошибка

Возникает, когда интерпретатор обнаруживает внутреннюю проблему, но при обнаружении этой ошибки интерпретатор Python не завершает работу.

<тд>

Выход из системы

Возникает, когда интерпретатор Python закрывается с помощью функции sys.exit(). Если не обрабатывается в коде, интерпретатор завершает работу.

<тд>

Ошибка типа

Возникает при попытке выполнить операцию или функцию, недопустимую для указанного типа данных.

<тд>

Ошибка значения

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

<тд>

Ошибка выполнения

Возникает, когда сгенерированная ошибка не попадает ни в одну категорию.

<тд>

Не реализована ошибка

Возникает, когда абстрактный метод, который необходимо реализовать в унаследованном классе, на самом деле не реализован.

Серийный номер Имя и описание исключения
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. 

Вот несколько важных моментов о вышеупомянутом синтаксисе —

Пример

Этот пример открывает файл, записывает содержимое в файл и выходит изящно, потому что нет никаких проблем —

Живая демонстрация
#!/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

  1. Типы данных Python
  2. Операторы Python
  3. Оператор передачи Python
  4. Аргументы функции Python
  5. Словарь Питона
  6. Ошибки Python и встроенные исключения
  7. Обработка исключений Python с использованием оператора try, exclude и finally
  8. Пользовательские исключения Python
  9. Итераторы Python
  10. Замыкания Python