обработка исключений 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