Python 标准异常总结

python为什么要设置异常机制呢。我觉得是为了维护程序使用者的用户体验。假如没有异常机制,只要出现一个小错误,就会提示一大段红色的代码,这时候程序使用者就会怀疑程序开发者的能力。因此,我们需要异常机制,对异常进行捕获,然后做出相应的处理。

检测异常的方法
检测异常的方法:

检测异常的方法:
try:
    检测范围    
except  Exception[as reason]:
    出现异常(Exception)后的处理代码
finally:
    无论如何都会被执行的代码

try语句捕获到异常之后就不会再执行之后的语句

示例如下:

try:

    f =open('一个根本不存在的文件.txt')
    print(f.read())
except OSError as reason:
    print('文件出错!'+'错误的原因是:'+str(reason))

finally:
    f.close()

我们来分析下上面这段代码。首先,以默认的只读的方式打开一个根本不存在的文件, 这当然会出现错误,错误类型是OSError。然后except 语句捕获到这个OSError并将其定义为reason,再执行except下面的代码打印出错误原因。而finally 后面接的代码,是无论是否出现异常都会执行的语句,一般是f.close()。
从上面我们可以看出,异常机制抛出异常的目的,更多的是提醒用户出现了什么错误,避免了出现了一大块红色报错信息,维护程序员的专业性。

try语句中执行顺序是从上到下的,一旦发生异常,就会被捕获,同时之后的代码就会被跳过不予执行。所以以下语句抛出的异常就不是OSError,而是TypeError。

try:
    a =int('abc')
    f =open('一个根本不存在的文件.txt')
    print(f.read())
except OSError as reason1:
    print('文件出错!'+'错误的原因是:'+str(reason1))
except TypeError as reason2:
    print('文件出错!'+'错误的原因是:'+str(reason2))
finally:
    f.close()

自己引发异常
异常除了被动的捕获,还可以主动的引发。用raise 语句,代码自己引发异常。

>>> raise 1>2
Traceback (most recent call last):
  File "", line 1, in 
    raise 1>2
TypeError: exceptions must derive from BaseException

常见的异常类型
AssertionError 断言语句(assert)失败

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

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

FloatingPointError 浮点计算错误

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

ImportError 导入模块失败的时候

IndexError 索引超出序列的范围

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

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

MemoryError 内存溢出(可通过删除对象释放内存)

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

NotImplementedError 尚未实现的方法

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

OverflowError 数值运算超出最大限制

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

RuntimeError 一般的运行时错误

StopIteration 迭代器没有更多的值

SyntaxError Python的语法错误

IndentationError 缩进错误

TabError Tab和空格混合使用

SystemError Python编译器系统错误

SystemExit Python编译器进程被关闭

TypeError 不同类型间的无效操作

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

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

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

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

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

ValueError 传入无效的参数

ZeroDivisionError 除数为零

你可能感兴趣的:(Python 标准异常总结)