StandardError:所有的内建标准异常的基类 ArithmeticError:所有数值计算异常的基类 FloatingPointError:浮点计算异常 OverflowError:数值运算超出最大限制 ZeroDivisionError:除零 AssertionError:断言语句失败 AttributeError:对象不包含某个属性 EOFError:没有内建输入,到达EOF标记 EnvironmentError:操作系统异常的基类 IOError:输入/输出操作失败 OSError:操作系统异常 windowsError:系统调用失败 ImportError:导入模块/对象失败 KeyboardInterrupt:用户中断执行 LookupError:无效数据查询的基类 IndexError:序列中没有此索引 KeyError:映射中没有这个键 MemoryError:内存溢出异常 NameError:未声明/初始化对象 UnboundLocalError:访问未初始化的本地变量 ReferenceError:弱引用试图访问已经垃圾回收了的对象 RuntimeError:一般的运行时异常 NotImplementedError:尚未实现的方法 SyntaxError:语法错误导致的异常 IndentationError:缩进错误导致的异常 TabError:Tab和空格混用 SystemError:一般的解释器系统异常 TypeError:对类型无效的操作 ValueError:传入无效的参数 UnicodeError:Unicode相关的异常 UnicodeDecodeError:Unicode解码时的异常 UnicodeEncodeError:Unicode编码错误导致的异常 UnicodeTranslateError:Unicode转换错误导致的异常 Warning:警告的基类 DeprecationWarning:关于被弃用的特征的警告 FutureWarning:关于构造将来语义会有改变的警告 UserWarning:用户代码生成的警告 PendingDeprecationWarning:关于特性将会被废弃的警告 RuntimeWarning:可疑的运行时行为(runtime behavior)的警告 SyntaxWarning:可疑语法的警告 ImportWarning:用于在导入模块过程中触发的警告 UnicodeWarning:与Unicode相关的警告 BytesWarning:与字节或字节码相关的警告 ResourceWarning:与资源使用相关的警告异常体系内部有层次关系,即某些异常属于某个异常的子类,该异常又可能是另一异常的子类 。较低层次、更具细节的异常是某些异常的子类,这些高层次的异常则称为基类,子类和基类是相对的 。Python异常体系中的部分关系如图2所示 。

文章插图
▲图2 Python常见异常体系
在图2中,越下面的异常,其层次越低,细节更明显,它们总有更高层次的基类 。
Python使用try语句处理异常,该语句一般包括try、except和else三个句式,组成try-except-else的形式 。try部分包含一个尝试执行的代码块,except部分是特定异常的处理对策,else部分则在程序运行正常时执行 。
try语句可以视为一种条件分支,与if语句的区别是try语句并不包含条件判断式,执行的流向也不取决于条件表达式,而依赖于代码块能否执行 。但其内在逻辑和运行流程与if语句是相似的,符合条件分支的特征,其基本语法格式如下 。
try: 操作语句1except 错误类型1: 操作语句2except 错误类型2: 操作语句3else: 操作语句4try语句常用的语法格式及其参数说明如下所示 。
try-except-else语句常用的语法格式及其参数说明:
- 错误类型:接收Python异常名,表示符合该异常则执行下面语句 。无默认值
- 操作语句:接收操作语句,表示执行一段代码 。无默认值
运行try-except-else语句时,程序首先执行try代码块,即可能出错的试探性语句,这可能导致致命性错误使得程序无法继续执行;如果try代码块确实无法执行,就可能执行某个except代码块 。
执行一个except代码块的条件是,系统捕捉的异常类型和该代码块标识的类型相符合;如果try代码块的语句正常执行,就接着执行else代码块的语句 。
如果try部分无法执行,也没有找到相应的except代码块,就将异常消息发送给程序调用端,如Python Shell,Python Shell对异常消息的默认处理则是终止程序的执行并打印具体的出错信息 。这也是在Python Shell中执行程序错误后所出现的出错打印信息的由来 。
在try语句中,except与else代码块都是可选的 。except代码块可以有0或多个;else代码块可以有0或1个 。但要注意,else语句的存在必须以except语句的存在为前提,在没有except语句的try语句中使用else语句,会引发语法错误 。
try语句中没有else时,就构成try-except语句,如代码清单⑤所示 。
推荐阅读
-
搞笑雨欣聊白领|为何被朱棣称为靖难第一功臣,明朝最不堪一击的将军
-
小爱说游戏Well 探索次世代创意,前重生工作室开发者组建新3A工作室Gravity
-
小莹游戏故事|妄想山海:从55000到57000,提升战力只需调调星宿!
-
亲属|一场被围观的悬疑命案:有小区居民开直播被骂 亲属称只关心小女儿的抚养
-
驱动之家|Pro X升级版正式上市:全新SQ 2处理器 12188元起,微软Surface
-
鬼斗车|可这几家自主品牌却面临“生死劫”,五菱汽车“神气”啦
-
世堺|中国要高度警惕了!,面对法国的这一个突然宣布
-
-
七点到北京南站到九点二十的飞机首都机场T3,咋样最快
-
-
小财鱼 小财鱼分享此时闲置店铺如何运作,二手平台狂欢到来
-
玛娜君 高通骁龙732G处理器曝光:骁龙730G小幅优化版
-
-
美好历史|他怕成第二个朱厚照,嘉靖真的相信二龙不相见?8个儿子夭折了6个
-
-
-
逗开心|你要去打球的时候只能这样做?,爆笑GIF图片:当老婆让你带孩子
-
电脑拼音输入法怎么调不出来汉文?电脑中安装的输入法显示不出来怎么办?
-
青年京东方供应商深科达今日科创板过会,产品落地华为苹果产线
-