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语句,如代码清单⑤所示 。
推荐阅读
-
西游记|西游记中最厉害的武器!观音:我认识但我打不过她!
-
9岁小孩不尊重老人怎么办,9岁小孩不尊重老人怎么办呀
-
澳大利亚|价格暴涨!中方送上“大礼”,澳大利亚“因祸得福”,或成最大赢家
-
-
证券资讯▲龙宇燃油将成为一支飞升龙股,龙宇燃油子公司与阿里云合作
-
国际在线网站非洲多国携手抗疫,疫情观察丨非洲各国全部报告确诊病例
-
-
手机大魔王谁是最好的安卓手表?这四项标准下,只有OPPO成功上岸
-
-
南方前沿|要求推翻法院阻止TikTok禁令的裁决,特朗普政府提出上诉
-
消防员|广东省消防救援总队《心火》大片:平凡人,因心火而不凡
-
-
想要更舒适的居家环境?SoleusAir舒乐氏加湿器安排上!
-
尼日利亚_社会|村庄发现15具尸体,全遭人残忍杀害
-
黄忠:黄忠烈魂火了,仅因这件890装备,大招可以打出6倍精准伤害
-
第一财经|电力央企混改提速,中国电建集中推介10宗混改项目
-
-
胸大穿什么类型衣服好看,胸大适合穿什么款式的衣服-
-
-
时代风云|美高官:需要55至60亿美金,很尴尬!美国生产疫苗资金不足