Latest web development tutorials

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

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

  • Обработка исключений: Python учебник сайта конкретное описание.
  • Утверждают (Assertions): Python учебник сайта конкретное описание.

стандартные Python исключения

Имя исключения описание
BaseException Базовый класс для всех исключений
SystemExit Переводчик запроса на выход
KeyboardInterrupt Пользователь Прерывание Выполнение (обычно введите ^ C)
исключение Общая ошибка базового класса
StopIteration не итератор не больше значения
GeneratorExit Генератор (генератор), чтобы уведомить аномальный выход
StandardError Все встроенного стандартного базового класса для исключений
ArithmeticError Все числовые базы ошибок класса
FloatingPointError ошибка вычисления с плавающей точкой
OverflowError Численные операции превысил максимальный предел
ZeroDivisionError В дополнение к (или модуля) ноль (все типы данных)
AssertionError отказ Утверждение
AttributeError Этот объект не имеет свойства
EOFError Нет встроенных входа и прибывающих EOF маркер
EnvironmentError Ошибка операционной системы базового класса
IOError Операций ввода / вывода на провал
OSError Ошибка операционной системы
WindowsError Системный вызов завершился неудачно
ImportError Импорт модуля / объекта не удалось
LookupError база данных запросов Invalid класса
IndexError Без этого индекса последовательности (индекс)
KeyError Без этого ключа отображения
MemoryError Ошибка переполнения памяти (для интерпретатора Python не является фатальным)
NameError Необъявленная / инициализировать объект (не собственность)
UnboundLocalError Доступ к неинициализированной локальной переменной
ReferenceError Слабые ссылки на объекты (слабая ссылка) пытаются получить доступ к коллекции мусора
RuntimeError Общая ошибка во время выполнения
NotImplementedError Метод не был реализован
SyntaxError Python синтаксис ошибки
IndentationError Отступ ошибка
TabError Tab и пространство смешивания
SystemError Обычно интерпретатор системных ошибок
TypeError Неверный тип операции
ValueError Недопустимые аргументы, передаваемые в
UnicodeError Ошибки, связанные с Unicode
UnicodeDecodeError Unicode декодирование ошибок
UnicodeEncodeError Ошибка кода Unicode
UnicodeTranslateError Ошибка преобразования Unicode
предупреждение Внимание базовый класс
DeprecationWarning Предупреждения об устаревших функций
FutureWarning Предупреждения о будущей структуре семантики изменились
OverflowWarning Старое предупреждение о автоматически повышен до длинного целого (длинный) из
PendingDeprecationWarning Это будет предупреждение о характеристиках отходов
RuntimeWarning Подозрительное поведение во время выполнения (Runtime поведение) предупреждение
SyntaxWarning Синтаксис предупреждения подозрительный
UserWarning Предупреждает генерацию кода пользователя

Что такое ненормальное?

Это исключение это событие, которое будет происходить во время выполнения программы, влияющие на нормальное выполнение программы.

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

Исключением является объект Python, представляющий ошибку.

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


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

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

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

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

Синтаксис:

Ниже приведен простой попытка .... кроме ... остальное синтаксис:

try:
<语句>        #运行别的代码
except <名字>:
<语句>        #如果在try部份引发了'name'异常
except <名字>,<数据>:
<语句>        #如果引发了'name'异常,获得附加的数据
else:
<语句>        #如果没有异常发生

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

  • Если исключение возникает при попытке выполнить, когда заявление после того, как, питон отпрыгнуть, чтобы попытаться выполнить первое согласование, за исключением пункта является исключением, обработка исключений завершается, поток управления на протяжении всего оператора Ьгу (если исключение не обрабатывается времени и вызвать новый исключения).
  • Если ненормальность происходит в заявлении попытку после многих лет, но ничего не найдено, за исключением пункта, исключение будет представлен в верхней части попытки, или в верхней части программы (которая положит конец программы, и выводит сообщение об ошибке по умолчанию).
  • Если исключение возникает при попытке условие не выполняется, иначе питона оператор будет выполняться после того, как заявление (если потом еще), то поток управления через весь заявлении попробовать.

примеров

Вот простой пример, он открывает файл, содержимое содержимого файла написано, и не происходит исключение:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

try:
    fh = open("testfile", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
    print "Error: 没有找到文件或读取文件失败"
else:
    print "内容写入文件成功"
    fh.close()

Выше вывод программы:

$ python test.py 
内容写入文件成功
$ cat testfile       # 查看写入的内容
这是一个测试文件,用于测试异常!!

примеров

Вот простой пример, он открывает файл, содержимое, написанные в содержимом файла, но файл не имеет разрешения на запись, исключение произошло:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

try:
    fh = open("testfile", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
    print "Error: 没有找到文件或读取文件失败"
else:
    print "内容写入文件成功"
    fh.close()

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

chmod -w testfile

Затем выполнить код, указанный выше:

$ python test.py 
Error: 没有找到文件或读取文件失败

За исключением случаев без использования любого типа исключения с

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

try:
    正常的操作
   ......................
except:
    发生异常,执行这块代码
   ......................
else:
    如果没有异常执行这块代码

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


И с использованием нескольких типов исключений, кроме

Кроме того, можно использовать те же, за исключением заявлений обрабатывать несколько исключений, следующим образом:

try:
    正常的操作
   ......................
except(Exception1[, Exception2[,...ExceptionN]]]):
   发生以上多个异常中的一个,执行这块代码
   ......................
else:
    如果没有异常执行这块代码

попробуй, наконец, заявление

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

try:
<语句>
finally:
<语句>    #退出try时总会执行
raise

примеров

#!/usr/bin/python
# -*- coding: UTF-8 -*-

try:
    fh = open("testfile", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
finally:
    print "Error: 没有找到文件或读取文件失败"

Если открыть файл не имеет разрешения на запись, вывод выглядит следующим образом:

$ python test.py 
Error: 没有找到文件或读取文件失败

Тот же самый пример можно записать следующим образом:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

try:
    fh = open("testfile", "w")
    try:
        fh.write("这是一个测试文件,用于测试异常!!")
    finally:
        print "关闭文件"
        fh.close()
except IOError:
    print "Error: 没有找到文件或读取文件失败"

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

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

Содержание параметра отличается от исключения.


Аномальные параметры

Исключение может принимать параметры, как параметры информационных ненормальность выходных.

Вы можете поймать исключение на основе заявлений параметров, за исключением следующего:

try:
    正常的操作
   ......................
except ExceptionType, Argument:
    你可以在这输出 Argument 的值...

Outlier переменные, как правило, включены в принимаемый заявление об исключении. Переменные в виде кортежей может принимать одно или несколько значений.

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

примеров

Ниже приведены примеры одного исключения:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 定义函数
def temp_convert(var):
    try:
        return int(var)
    except ValueError, Argument:
        print "参数没有包含数字\n", Argument

# 调用函数
temp_convert("xyz");

Результаты описанных выше процедур следующим образом:

$ python test.py 
参数没有包含数字
invalid literal for int() with base 10: 'xyz'

Trigger ненормальным

Мы можем использовать оператор, чтобы поднять себе вызвать исключение

поднять синтаксис выглядит следующим образом:

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

Исключение утверждение является тип исключения (например, NameError) параметр является ненормальным значение параметра. Этот параметр не является обязательным, если не предусмотрено, аргумент исключение не является "None".

Последний аргумент является необязательным (редко используется на практике), если есть объект исключения трассировки.

примеров

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

Очень простое определение исключения, следующим образом:

def functionName( level ):
    if level < 1:
        raise Exception("Invalid level!", level)
        # 触发异常后,后面的代码就不会再执行

Примечание: Для того, чтобы быть в состоянии поймать исключение, " за исключением" заявление должно быть полезно , чтобы бросить один и тот же объект класса исключение или строку.

Например, мы фиксируем больше, чем исключение, "за исключением" заявление выглядит следующим образом:

try:
    正常逻辑
except "Invalid level!":
    触发自定义异常    
else:
    其余代码

примеров

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 定义函数
def mye( level ):
    if level < 1:
        raise Exception("Invalid level!", level)
        # 触发异常后,后面的代码就不会再执行

try:
    mye(0)                // 触发异常
except "Invalid level!":
    print 1
else:
    print 2

Реализация указанного выше кода, выход:

$ python test.py 
Traceback (most recent call last):
  File "test.py", line 11, in <module>
    mye(0)
  File "test.py", line 7, in mye
    raise Exception("Invalid level!", level)
Exception: ('Invalid level!', 0)

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

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

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

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

class Networkerror(RuntimeError):
    def __init__(self, arg):
        self.args = arg

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

try:
    raise Networkerror("Bad hostname")
except Networkerror,e:
    print e.args