7段代码带你玩转Python条件语句( 三 )

  • 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所示 。
    7段代码带你玩转Python条件语句

    文章插图
    ▲图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语句,如代码清单⑤所示 。


    推荐阅读