目录
程序运行时检测出的错误,解释器无法继续执行,继而出现程序中断,这些错误统称为异常
- print(10/0)
-
- 结果:
- ZeroDivisionError: division by zero
- f = open('python.txt', 'r')
- content = f.readline()
- print()
-
- 结果:
- FileNotFoundError: [Errno 2] No such file or directory: 'python.txt' # 差找不到文件错误
错误发生,原有的程序无法继续执行,对于用户来说,不能因该问题就终止程序执行,所以要给出异常处理的机制,让设计者知道为什么出现错误,应该怎么处理
显示异常 --- 明确语法错误,有提示
隐式异常 --- 不容易发现,一般与操作有关
异常的追踪信息 --- 异常出现在哪一行
异常的类型 --- 内置在Python中,根据异常类型给出提示
异常内容 --- 异常的简单解释
| 异常名称 | 描述 |
|---|---|
| NameError | 变量没有声明 |
| IndexError | 索引超出序列范围 |
| IndentationError | 缩进错误 |
| ValueError | 传入的值有误 |
| KeyError | 请求的字典关键字不存在 |
| IoError | 输入输出错误 |
| ImportError | 模块加载错误 |
| AttibuteError | 访问位置的对象属性 |
| TypeError | 类型不匹配错误 |
| MemoryError | 内存不足 |
| ZeroDivisionError | 除数为0 |
- try:
- 可能发生的错误代码
- except
- 异常出现后的执行代码
可能发生的错误代码 --- 一般为正常的程序段
异常出现后的执行代码 --- 可以写固定的提示信息
当try语句块的代码出现错误,就会执行except后的代码块,若没有出现错误则except之后的代码不会执行
- try:
- f = open('python.txt', 'r')
- content = f.readline()
- print()
- except:
- f = open('python.txt', 'r')
- f.write('发生异常,则执行except后的代码')
- f.close()
原因 --- 有针对性的捕获异常,并执行相应代码
格式
- try:
- 可能遇到的异常代码
- except(需要捕获异常的名称 [as 新名称]):
- 异常出现后的执行代码
需要捕获异常的名称 [as 新名称] --- 表示指明需要捕获的异常名,由于名称太长可以利用as命名一个别名,可以省略
else语句表示如果没有异常则需要执行的代码
- try:
- 可能遇到的异常代码
- except:
- 异常出现后的执行代码
- else:
- 没有发现异常时执行的语句
- try:
- f = open(1)
- except:
- f = open(e)
- else:
- print('呵呵,没有异常,没问题')
finally语句表示无论是否有异常都要执行的语句,如:关闭文件、关闭数据库
- try:
- 可能遇到的异常代码
- except:
- 异常出现后的执行代码
- else:
- 没有发现异常时执行的语句
- finally:
- 必须执行的代码块
- try:
- f = open('python.txt', 't')
- except:
- f = open('python.txt', 'w')
- else:
- print('真棒,无异常')
- finally:
- print('关闭文件')
- f.close()
若果某个函数或方法可能出现异常,但又不愿在当前去处理,则可以使用raise语句来处理
- def input_password():
- password = input('请输入密码,不少于6位:')
- if len(password) < 6:
- # 抛出异常
- raise Exception('您的密码不足六位')
- pass
- print(password)
-
-
- input_password()