1、目标
使用异常处理机制
常用异常类
2、Python异常处理机制
2.1、异常处理关键字
关键字 | 说明 | 形式 |
try | 检查代码块 |
|
except | 捕捉处理异常 一个try可连续使用多个except 一个except可捕捉多种异常 | except Exception, e: #处理异常 except (ValueError, TypeErroe), e: #一个except处理多个异常 |
else | try无异常时执行 |
|
finally | 无论异常与否,必执行 |
|
raise | 触发抛出异常 | raise [SomeException [,args[,traceback]]] #traceback:异常触发时的跟踪记录对象 |
2.2、异常处理流程示例
try: #检查代码块 except ValueError, e: #处理ValueError except TypeError, e #处理TypeError except Exception, e raise string, “new exception” #抛出异常 else: #无异常时,执行 finally: #清理垃圾 |
3、常用异常类
3.1、异常类继承树
3.2 异常类Exception属性
3.2.1继承自BaseException的
属性 | 说明 |
args | raise Exception [,args [, traceback]] 中的args,元组类型 raise Exception, (“error message”, errorno) |
message | Exception(“my message”), “my message” 为message属性值 注(’my message’,)为args元组 |
方法 | 说明 |
__reduce__ | __reduce__(self):序列化自身 |
__setstate__ | 当处理unpickling(不可序列化) 的对象的实例属性时,可以使用特殊的方法 |
__unicode__ | 解码为unicode对象 |
装饰器(slot wrapper) | 说明 |
__init__ |
|
__str__ | 返回可读字符串 |
__repr__ | representation,返回可解析的字符串。它的返回值通常可以用来重新获得该对象,通常情况下 obj==eval(repr(obj)) |
__setattr__ | 添加(属性/值)对,__setattr__(self, key, value) 示例见附录2 |
__delattr__ | 删除(属性/值)对,__delattr__ (self, key) |
__getattribute__ | 获取属性,__getattr__ (self, key) |
__getitem__ | 迭代args元组 |
__getslice__ | 获取args元组片段,__getslice__(i,j) = __getitem__(slice(i,j) |
3.2.2继承自Object
内建方法 | 说明 |
__new__ | 构造方法 |
__subclasshook__ | __subclasshook__(subclass) 判断subclass是否为本类的子类 |
方法 | 说明 |
__format__ | 接受一个格式化指示符作为参数,来控制怎样格式化自己。 __format__(self, format_spec) 示例见附录3 |
__reduce_ex__ | __reduce_ex__(self, protocol) 当pickling时被调用,如果没有,则调用__reduce__,若也没有,则此类可以正常pickling |
__sizeof__ | 获取对象占用字节数 |
装饰器 | 说明 |
__hash__ | 计算对象的hash键值 |
|
|
3.3异常类列表
异常类 | 描述 |
BaseException | 异常基类 |
SystemExit | python解释器请求退出 |
KeyboardInterrupt | 用户中断执行(ctl+c) |
Exception | 常规错误的基类 |
StopIteration | 迭代器没有更多值 |
GeneratorExit | 生成器异常请求退出 |
|
|
ArithmeticError | 所有数值计算错误基类 |
FloatingPointError | 浮点计算错误 |
OverflowError | 数值溢出异常 |
ZeroDivisionError | 除以0异常 |
AssertionError | 断言语句异常 |
AttributeError | 对象没有这个属性 |
EOFError | 到达EOF标记 |
|
|
EnvironmentError | 操作系统错误基类 |
IOError | 输入输出操作失败 |
OSError | 操作系统错误 |
WindowsError | Windows系统调用失败 |
ImportError | 导入模块/对象失败 |
KeyboardInterrupt | 用户中断执行(ctrl+c) |
|
|
LookupError | 无效数据查询基类 |
IndexError | 序列中没有此索引 |
KeyError | 映射中没有此键 |
MemoryError | 内存溢出 |
NameError | 未声明/未初始化对象 |
UnboundLocalError | 访问未初始化本地变量 |
ReferenceError | 弱引用访问已回收对象错误 |
RuntimeError | 一般运行时错误 |
NotImplementatedError | 尚未实现的方法 |
|
|
SystemError | 一般的解释器系统错误 |
IndentationError | 缩进错误 |
TabError | Tab和空格混用 |
SyntaxError | python语法错误 |
TypeError | 对类型无效的操作 |
ValueError | 传入无效的参数 |
|
|
UnicodeError | Unicode相关错误 |
UnicodeDecodeError | Unicode解码错误 |
UnicodeEncodeError | Unicode编码错误 |
UnicodeTranslatError | Unicode转换错误 |
|
|
Warning | 警告的基类 |
DeprecationWarning | 关于被弃用特征的警告 |
FutureWarning | 构造将来语义会有改变的警告 |
OverflowWarning | 自动提升长整型警告 2.4弃用 |
PendingDeprecationWarning | 特性将被弃用的警告 |
RuntimeWarning | 可疑的运行时行为的警告 |
SyntaxWarning | 可疑语法的警告 |
UserWarning | 用户代码生成警告 |
附录:
1、__setstate__ : 修改Foo对象的状态(修改打开的文件,和写入位置)
class Foo(object): def __init__(self, value, filename): self.value = value self.logfile = file(filename, 'w') def __getstate__(self): """Return state values to be pickled.""" f = self.logfile return (self.value, f.name, f.tell()) def __setstate__(self, state): """Restore state from the unpickled state values.""" self.value, name, position = state f = file(name, 'w') f.seek(position) self.logfile = f
|
2、__setattr__,__delattr__, __getattr__
class storage(dict): |
def __format__(self, format_spec): |