1、异常(基础)exception (捕获异常,尝试接受异常通知)
- 什么是错误: 错误是指由于逻辑或语法导致一个程序无法正常执行的问题。
- 特点: 有些错误是无法预知的
- 什么是异常:
- 异常是程序出错时标识的一种状态
- 当异常发生时,程序不会再向下执行,而转去调用此函数的地方待处理此错误并恢复为正常状态
- 作用: 用作信号,通知上层调用者有错误需要处理。
语法:
两种语法:
try -- except 语句(至少有一个except)
try -- finally 语句
1、try -- except 语句
try:
可能触发异常的语句
except 错误类型1 [as 变量1]:
异常处理语句1
except 错误类型2 [as 变量2]:
异常处理语句2
...............
except:
异常处理语句other
else:#没有异常会执行
未发生异常语句
finally:#任何情况下都会执行
最终语句
作用:尝试捕获异常,将程序转为正常状态并继续执行。
#try-except 示例
def div_apple(n):
print("%d个苹果,分几人。"%n)
s = input('请输入人数:')
cnt = int(s)
result = n/cnt
print('每个人分了%d个苹果'%result)
#写法1
# try:
# div_apple(5)#此函数可能会触发错误
# except ValueError:
# print('分苹果错误,程序停止。')
# except ZeroDivisionError:#人数为0,错误
# print("人数不能为0")
#写法2,直接两个错误类型放在一起。
# try:
# div_apple(5)#此函数可能会触发错误
# except (ValueError,ZeroDivisionError):
# print('分苹果错误,程序停止。')
#写法3,接收所有类型错误
try:
div_apple(5)#此函数可能会触发错误
except:
print('分苹果错误,程序停止。')
print('程序正常退出')
#打印出错误信息
try:
div_apple(5)#此函数可能会触发错误
except ValueError as e:
print('分苹果错误,程序停止。')
print(e)
print('程序正常退出')
运行结果:
分苹果错误,程序停止。
invalid literal for int() with base 10: 'd'
程序正常退出
常见异常:https://blog.csdn.net/weixin_41357300/article/details/87709727
2、try-finally语句:(执行一定要执行的语句)
语法:
try:
可能触发异常的语句
finally:
一定要执行的语句。
说明:1、finally子句不可以省略
2、一定不存在except子句
作用:通常用try-finally语句来做出发异常时必须要处理的事情,无论异常是否发生,finally子句都会被执行。
注: try-finally 语句不会改变程序的状态(正常/异常)状态
#try-finally实例
def fry_egg():
try:
print('打开天然气。。')
try:
count = int(input('请输入鸡蛋个数'))
print('一共煎了%d个鸡蛋'%count)
finally:
print('关闭天然气')
except:
pass
fry_egg()
print('程序正常执行。')
3、raise语句:(发送异常通知,将程序转为异常状态)
作用:出发一个错误,让程序进入异常状态
语法:raise 异常类型 或者 raise 对象 异常
def make_exception():
print('begin')
#出发ValueError类型的异常并进入异常状态
#raise valueError 只发送错误类型
raise ValueError('自己编写的错误')#后面可以添加错误信息
print('end')
try:
make_exception()
except ValueError as e:
print('try里出现了值错误通知,已经捕获')
print(e)
else:
print('make_exception调用结束')
assert语句(断言语句):(根据条件触发AssertionErrror类型的异常)
语法: assert 真值表达式,错误数据(通常是字符串)
作用:当真值表达式为False时,用错误数据创建一个AssertionError类型的错误,并进入异常状态
等同于:
if 真值表达式 == False:
raise AssertionError(错误数据)
#assert语句的用法
def get_score():
s = int(input('请输入学生成绩:'))
assert 0<=s<=100,'用户输入的整数不在0-100之间'
return s
try:
score = get_score()
print('学生的成绩为:',score)
except ValueError:#类型输入错误。
print('用户输入的成绩无法转换成整数。')
except AssertionError as e:#发生了断言错误
print(e)
注:为什么要用异常处理机制?
在程序调用层数较深时,向主调函数传递错误信息需要层层return返回比较麻烦,所以用异常处理机制解决此类问题。
能够快速的将错误传递给调用者。