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语句,如代码清单⑤所示 。
推荐阅读
-
游趣电竞|还在努力,UZI认真谈复出:首先要具备两个关键因素
-
【高校】关于高考的谣言,很多家长同学上当,耽误孩子一生,要切记这几条
-
浙江大学|浙大通报“学生努XX受留校察看处分”:启动后续调查
-
手机中国i9处理器加持不可错过,外星人m15/17游戏本2020版上架
-
-
「」华为新机入网:麒麟990 5G+40W快充,跟P40系列一样值得期待?
-
田广艳|而是去侠客岛写了侠客行,张无忌赵敏最后结局:没去草原牧马放羊
-
-
-
新鲜的星座知识紫气东来,全家跟着享福的三个生肖,未来三年鸿运当头
-
-
-
-
峨眉山A_我公司旗下分公司峨眉雪芽茶业是集高山生态茶业种植...
-
固态硬盘|长江存储全球首发三体联名版致态TiPro7000 SSD:1TB 999元
-
-
-
白思豪■“弗洛伊德尸检报告反转”,美国骚乱更难平息了|新京报快评
-
178游戏网|上线计划再一次落空,DNF手游iOS商店下架
-