版本:python2.7 系统:Mac OSX
异常处理是代替日渐衰落的error code方法的新法,提供error code 所未能具体的优势。异常处理分离了接收和处理错误代码。这个功能理清了编程者的思绪,也帮助代码增强了可读性,方便了维护者的阅读和理解。
简单来说,我们写程序时,有时候会出现一些错误导致程序运行终止。为了防止程序奔溃,以及快速捕捉原因,在编写程序时可以编进一些处理异常的代码。
异常处理常用关键词有:try、expect、finally、raise、with等
python常见的标准异常类型见文章最后。
1异常处理:try、expect、finally
try:
pass1 # pass是占位符,当没想好用什么代码时,先用pass占位
except Errorname1 ,Errorname2 as e:
pass2
else:
pass3
finally:
pass4
1)try. try模块表示可能发生错误的语句
2)except. except用来处理异常。except可以处理一个专门的异常,也可以处理一组圆括号中的异常,如果except后没有指定异常,则默认处理所有的异常。一旦出现except后面所指的目标异常,则执行except后面的语句pass,否则执行else后面的语句pass3.
except 后面的e表示把except后面的错误赋值给e.
在python2.6 以前的版本 中,这个语句是except (Errorname1 ,Errorname2), e
3)finally. 无论是否出现错误,finally后面的语句都会被执行。
注意:每一个try,都必须至少有一个except
2 raise
2.1 raise 作用
主动抛出一个异常
2.2 raise 语法
raise [Exception [, args [, traceback]]]
语句中Exception是异常的类型(例如,NameError)参数是一个异常参数值。该参数是可选的,如果不提供,异常的参数是"None"。最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。
2.3 raise 用法例子
try:
raise IOError #主动发出一个IOError
except IOError:
print "I"
结果:
I
2.4 raise其他用法:单独使用一个raise
try:
do something
except IOError:
raise
这句中,是捕获了IOError,但不做任何处理,将它抛给上一层处理。例如:
try:
try:
raise IOError
except IOError:
print "inner exception"
raise # <same as raise IOError>
except IOError:
print "outter exception"
显示结果:
inner exception
outter exception
3 with
有一些任务,可能事先需要设置,事后做清理工作。对于这种场景,Python的with语句提供了一种非常方便的处理方式。
例子,用try语句:
file = open("1.txt")
try:
data = file.read()
finally:
file.close()
用with语句:
with open("1.txt") as file:
data = file.read()
4python标准类异常
异常名称 | 描述 |
---|---|
BaseException | 所有异常的基类 |
SystemExit | 解释器请求退出 |
KeyboardInterrupt | 用户中断执行(通常是输入^C) |
Exception | 常规错误的基类 |
StopIteration | 迭代器没有更多的值 |
GeneratorExit | 生成器(generator)发生异常来通知退出 |
SystemExit | Python 解释器请求退出 |
StandardError | 所有的内建标准异常的基类 |
ArithmeticError | 所有数值计算错误的基类 |
FloatingPointError | 浮点计算错误 |
OverflowError | 数值运算超出最大限制 |
ZeroDivisionError | 除(或取模)零 (所有数据类型) |
AssertionError | 断言语句失败 |
AttributeError | 对象没有这个属性 |
EOFError | 没有内建输入,到达EOF 标记 |
EnvironmentError | 操作系统错误的基类 |
IOError | 输入/输出操作失败 |
OSError | 操作系统错误 |
WindowsError | 系统调用失败 |
ImportError | 导入模块/对象失败 |
KeyboardInterrupt | 用户中断执行(通常是输入^C) |
LookupError | 无效数据查询的基类 |
IndexError | 序列中没有没有此索引(index) |
KeyError | 映射中没有这个键 |
MemoryError | 内存溢出错误(对于Python 解释器不是致命的) |
NameError | 未声明/初始化对象 (没有属性) |
UnboundLocalError | 访问未初始化的本地变量 |
ReferenceError | 弱引用(Weak reference)试图访问已经垃圾回收了的对象 |
RuntimeError | 一般的运行时错误 |
NotImplementedError | 尚未实现的方法 |
SyntaxError | Python 语法错误 |
IndentationError | 缩进错误 |
TabError | Tab和空格混用 |
SystemError | 一般的解释器系统错误 |
TypeError | 对类型无效的操作 |
ValueError | 传入无效的参数 |
UnicodeError | Unicode 相关的错误 |
UnicodeDecodeError | Unicode 解码时的错误 |
UnicodeEncodeError | Unicode 编码时错误 |
UnicodeTranslateError | Unicode 转换时错误 |
Warning | 警告的基类 |
DeprecationWarning | 关于被弃用的特征的警告 |
FutureWarning | 关于构造将来语义会有改变的警告 |
OverflowWarning | 旧的关于自动提升为长整型(long)的警告 |
PendingDeprecationWarning | 关于特性将会被废弃的警告 |
RuntimeWarning | 可疑的运行时行为(runtime behavior)的警告 |
SyntaxWarning | 可疑的语法的警告 |
UserWarning | 用户代码生成的警告 |
参考资料
1(Python)异常处理try...except、raise
2 Python异常处理:单独一个raise
3 百度百科:异常处理
4 python2 与 python3 语法区别