Python 语言-第二章流程控制结构加餐之异常处理
2.4 异常处理
2.4.1 Bug 的常见类型
- 粗心导致的错误,如:
SyntaxError
:Python 语法错误- 漏了末尾的冒号,如 if 语句、循环语句、else 子句等等
- 缩进错误
- 把英文符号写成了中文符号,比如冒号、引号、括号
- 字符拼接时,把字符串和数字进行了拼接
- 没有定义变量,比如 while 循环条件的变量
- "=="比较运算符与"="赋值运算符混用
- 知识不熟练导致的错误,如:
IndexError
:索引越界错误- 使用 append() 方法时
- 思路不清晰导致的错误,如:
- for 循环进行嵌套
- 解决方法:
- 多使用 print() 函数
- 使用注释理清思路
- 被动掉坑:程序逻辑没有问题,因为用户操作或者一些”例外情况“导致程序出现问题,如:
- 输入的被除数为 0
- 解决方法:
- 使用 python 的异常处理机制,在出现异常时捕获异常,”内部消化“,让程序继续运行
2.4.2 python 的异常处理机制
2.4.2.1 try - except
语句
- 作用: 捕获程序在执行时遇到的异常情况,即一些报错。
- 意义: 因为程序在发现某个错误时,往往会中断不再向下执行。
- 代码的执行过程:
- 先执行 try 代码块, 发现了错误。就执行 except 代码块 向下执行
- 先执行 try 代码块, 发现了错误。就执行 except 代码块 向下执行
2.4.2.2 多个 except
结构
- 代码的执行过程:
- 如果执行到 except 代码块会按照先子类后父类的顺序
- 为了避免遗漏可能出现的异常,可以在最后增加 BaseException
- 例如:
2.4.2.3 try-except-else
结构
- 代码执行过程:
- 如果 try 语句块中没有抛出异常,则执行 else 语句块,如果 try 语句块抛出异常,则执行 except 语句块
- 例如:
2.4.2.4 try-except-else-finally
结构
-
代码执行过程:
- finally 语句块无论是否发生异常都会被执行
- finally 语句块无论是否发生异常都会被执行
-
能常用来释放 try 语句块中申请的资源
-
例如:
2.4.2.5 traceback
模块
- 异常信息:报错时,Charm 下面的红色部分就是异常信息
- traceback 模块的作用:打印异常信息
- 因为有时候时需要我们将异常信息写入日志文件,所以需要用到这个模块
2.4.3 python 常见的异常类型
-
异常类型 描述 Zero Division Error 在除法(取模运算)中以 0 作为除数 IndexError 序列中没有此索引 KeyError 映射中没有这个键 NameError 未声明/初始化对象(没有对象) SyntaxError Python语法错误 ValueError 传入无效参数 TypeError 对类型操作无效操作 ImportError 导入模块/对象失败