首页 > 其他学习 > python > python的异常类型和异常处理
2017
09-30

python的异常类型和异常处理

python 常用异常类型:

AssertionError:断言语句(assert)失败

AttributeError:尝试访问未知的对象属性

EOFError:用户输入文件末尾标志EOF(Ctrl+d)

FloatingPointError:浮点计算错误

GeneratorExit:generator.close()方法被调用的时候

ImportError:导入模块失败的时候

IndentationError:代码书写的缩进错误

IndexError:索引超出序列的范围

IOError:输入输出错误

LookupError:键、值不存在引发的异常

KeyError:字典中查找一个不存在的关键字

KeyboardInterrupt:用户输入中断键(Ctrl+c)

MemoryError:内存溢出,内存耗尽异常(可通过删除对象释放内存)

NameError:尝试访问一个不存在的变量

NotImplementedError:尚未实现的方法

OSError:操作系统产生的异常(例如打开一个不存在的文件)

OverflowError:数值运算超出最大限制

ReferenceError:弱引用(weak reference)试图访问一个已经被垃圾回收机制回收了的对象

RuntimeError:一般的运行时错误

StopIteration:迭代器没有更多的值

SyntaxError:Python的语法错误

TabError:Tab和空格混合使用

TypeError:类型错误

SystemError:Python编译器系统错误

SystemExit:Python编译器进程被关闭

TypeError:不同类型间的无效操作

UnboundLocalError:访问一个未初始化的本地变量(NameError的子类)

UnicodeError:Unicode相关的错误(ValueError的子类)

UnicodeEncodeError:Unicode编码时的错误(UnicodeError的子类)

UnicodeDecodeError:Unicode解码时的错误(UnicodeError的子类)

UnicodeTranslateError:Unicode转换时的错误(UnicodeError的子类)

ValueError:传给函数无效的参数

ZeroDivisionError:除数为零

StandardError 标准异常除StopIteration, GeneratorExit, KeyboardInterrupt 和SystemExit外,其他异常都是StandarError的子类。

异常处理:

try:
    try_suite
except [Exception [as e]]: #e只是一个变量名称,可以随便写
    do_except
else:
    do_else
finally:
    do_finally

执行顺序:

1、若try语句没有捕获异常,执行完try_suite代码后,执行else代码段,最后执行finally。

2、若try捕获异常,首先执行except处理错误,然后执行finally。

注意点:

1、except语句中Exception代表错误类型名称,直接写Exception代表不指定具体的错误类型,这样可以捕获到全部的错误类型,也可以指定错误类型,这样仅捕获指定的错误类型,可以使用多个except语句来捕获不同类型的错误,except后面的Exception as e语句都可以省略,可以捕获所有的异常。

2、except后面可以跟一个元祖,元祖里面是错误类型名称,这样可以捕获元祖里面所有的错误类型,如except (OSError,TypeError),这样使用后面就不能跟as e语句了。

3、else语句只有在try语句没有捕获到错误时才会执行,一般用于调试程序使用,可以省略。

4、finally语句不管try是否捕获错误,都会在最后执行,如果没有except语句,会先执行finally语句,然后在把错误抛给解释器处理,一般用于为异常处理事件提供清理机制,用来关闭打开的资源或释放系统资源,可以省略。

抛出异常:

raise Exception('错误提示信息')语句允许强制抛出一个指定的异常。

Exception必需是一个异常实例或异常类(继承自 Exception 的类)

如果需要抛出一个异常,但不想处理它,raise语句可以重新抛出该异常:

try:

raise NameError('HiThere')

except NameError:

print('An exception flew by!')

raise

自定义异常:

在程序中可以通过创建新的异常类型来命名自定义的异常。异常类通常应该直接或间接的从Exception类派生,例如:

class MyError(Exception):

def __init__(self, value):

self.value = value

def __str__(self):

return repr(self.value)

try:

raise MyError(2*2)

except MyError as e:

print('My exception occurred, value:', e.value)

断言语句:

assert语句用于检测表达式是否为真,如果为假,程序自动崩溃(自杀)并抛出AssertionError错误,我们可以用它在程序中置入一个检查点,当需要确保程序中某个条件一定为真程序才能正常工作时,我们可以使用assert断言语句。

assert expression [,args]

expression为用于检测的表达式

args为这个AssertionError错误的描述信息

附python内置异常类层次结构:

BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
      +-- StopIteration
      +-- ArithmeticError
      |    +-- FloatingPointError
      |    +-- OverflowError
      |    +-- ZeroDivisionError
      +-- AssertionError
      +-- AttributeError
      +-- BufferError
      +-- EOFError
      +-- ImportError
      +-- LookupError
      |    +-- IndexError
      |    +-- KeyError
      +-- MemoryError
      +-- NameError
      |    +-- UnboundLocalError
      +-- OSError
      |    +-- BlockingIOError
      |    +-- ChildProcessError
      |    +-- ConnectionError
      |    |    +-- BrokenPipeError
      |    |    +-- ConnectionAbortedError
      |    |    +-- ConnectionRefusedError
      |    |    +-- ConnectionResetError
      |    +-- FileExistsError
      |    +-- FileNotFoundError
      |    +-- InterruptedError
      |    +-- IsADirectoryError
      |    +-- NotADirectoryError
      |    +-- PermissionError
      |    +-- ProcessLookupError
      |    +-- TimeoutError
      +-- ReferenceError
      +-- RuntimeError
      |    +-- NotImplementedError
      +-- SyntaxError
      |    +-- IndentationError
      |         +-- TabError
      +-- SystemError
      +-- TypeError
      +-- ValueError
      |    +-- UnicodeError
      |         +-- UnicodeDecodeError
      |         +-- UnicodeEncodeError
      |         +-- UnicodeTranslateError
      +-- Warning
           +-- DeprecationWarning
           +-- PendingDeprecationWarning
           +-- RuntimeWarning
           +-- SyntaxWarning
           +-- UserWarning
           +-- FutureWarning
           +-- ImportWarning
           +-- UnicodeWarning
           +-- BytesWarning
           +-- ResourceWarning
最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。