目录
一、什么是异常
- 如果代码没有语法问题,可以运行,但会出运行时的错误,例如除零错误,下标越界等问题,这种在运行期间检测到的错误被称为异常
- 出现了异常必须处理,否则程序会终止执行,用户体验会很差。
- Phthon支持程序员自己处理检测到的异常。
- 可以使用try-except语句进行异常的检测和处理。
二、Python中常见的异常类型
报错类型 | 描述 |
AssertionError | 当assert断言条件为假的时候抛出的异常 |
AttributeError | 当访问的对象属性不存在的时候抛出的异常 |
IndexError | 超出对象索引的范围时抛出的异常 |
KeyError | 在字典中查找一个不存在的key抛出的异常 |
NameError | 访问一个不存在的变量时抛出的异常 |
OSError | 操作系统产生的异常 |
SyntaxError | 语法错误时会抛出此异常 |
TypeError | 类型错误,通常是不同类型之间的操作会出现此异常 |
ZeroDivislonError | 进行数学运算时除数为0时会出现此异常 |
三、try-except语句
- 首先执行try中 [代码块A],如果出现异常,立即终止代码执行,转而到except块中进行异常处理
- 异常处理except模块可以多个,从上往下匹配,如果能够匹配成功,立即执行相应的异常处理代码块,执行完毕后,不在往下匹配,转到3执行
- 执行异常处理完毕后,如果有finally字句则执行finally字句,如果没有则执行 [后续语句]
- 如果匹配不到异常,有finally则执行finally,然后则抛出错误,终止程序执行。
- 如果没有异常,如果有else字句则执行else字句,执行完else后,有finally字句则执行,没有则执行 [后续语句]
try:
[代码块A] # 可能会出错误的代码 异常检测
except Exception1[as e]:
# 异常处理
[代码块1] # 异常处理代码
except Exception2[as e]:
# 异常处理
[代码块2] # 异常处理代码
……
except Exceptionn[as e]:
#异常处理
[代码块n] # 异常处理代码
[else:]
# 可选,如果没有引发异常会执行 处理语句
[finally:]
# 无论如何都要执行的语句 处理语句
[后续语句]
举例:
try:
# 有可能出现异常的代码
n = int(input('请输入一个数字:'))
n = 5 / n
print(n)
except ZeroDivisionError as e:
print('除数不能为0')
print('原始报错信息',e)
except:
print('请输入数字')
else:
print('运行没有被except语句捕获,执行else模块')
finally:
print('无论如何,都要执行finally模块')
运行结果:
# 输入非数字时的运行结果
请输入一个数字:cy
请输入数字
无论如何,都要执行finally模块
# 输入0时的运行结果
请输入一个数字:0
除数不能为0
原始报错信息 division by zero
无论如何,都要执行finally模块
# 输入数字时的运行结果
请输入一个数字:10
0.5
运行没有被except语句捕获,执行else模块
无论如何,都要执行finally模块
四、raise关键字
用途:手动抛出异常
# pwd = input('请输入密码:')
# if len(pwd) < 8:
# print('密码太短,请输入8位以上的密码')
# else:
# print('登录操作')
try:
pwd = input('请输入密码:')
if len(pwd) < 8:
raise Exception('密码太短,请输入8位以上的密码')
except Exception as e:
print(e)
运行结果:
请输入密码:517
密码太短,请输入8位以上的密码
五、练习题:简单计算器
while True:
try:
op = input('请输入一个四则运算算式(如:1+2):')
if '+' in op:
a = op.split('+')
result = int(a[0]) + int(a[1])
print(result)
elif '-' in op:
a = op.split('-')
result = int(a[0]) - int(a[1])
print(result)
elif '*' in op:
a = op.split('*')
result = int(a[0]) * int(a[1])
print(result)
elif '/' in op:
a = op.split('/')
result = int(a[0]) / int(a[1])
print(result)
elif op=='C':
print('感谢使用')
break
else:
raise Exception('请按“1+2”格式输入算式')
except ZeroDivisionError:
print('注意:除数不能为0')
except Exception as e:
print(e)
运行结果:
请输入一个四则运算算式(如:1+2):123
请按“1+2”格式输入算式
请输入一个四则运算算式(如:1+2):2/0
注意:除数不能为0
请输入一个四则运算算式(如:1+2):1+2
3
请输入一个四则运算算式(如:1+2):C
感谢使用