目录
一、异常的概念
-
程序在运行时,如果Python解释器遇到一个错误,则会停止程序的执行,并且提示一些错误信息,这就是 异常
-
程序停止执行,并且提示错误信息这个动作,通常称为: 抛出(raise)异常
二、捕获异常
1、应用场景
-
程序开发时,很难将 所有的特殊情况 都处理的面面俱到,通过 异常捕获 可以针对突发事件做集中的处理,从而保证程序的 稳定性和健壮性
-
在自动化测试过程中,也可以借助捕获异常操作,完成类似:用例执行报错时截图、打印日志信息等操作
2、基本语法格式
3、捕获异常案例
(1)需求
-
获取用户从键盘输入的数据
-
转换数据类型为整数
-
数据转换类型正确时,输出数据内容
-
数据转换类型错误时,提示输入正确数据
(2)示例代码
# 定义输入数据函数
def input_num():
# try:尝试,下方编写要尝试代码,不确定是否能够正常执行的代码
try:
num = int(input('请输入数字:'))
print('获取的数据为:{}'.format(num))
except:
print('请输入正确数据!')
if __name__ == '__main__':
input_num()
'''
运行结果:
请输入数字:2.5
请输入正确数据!
请输入数字:1
获取的数据为:1
'''
4、捕获特定异常类型案例
(1)需求
-
提示用户输入一个整数
-
使用8除以用户输入的整数并且输出
(2)案例分析
-
用户输入的可能不是一个整数
-
0不能做除数
(3)示例代码
def input_num():
try:
num = int(input('请输入整数:'))
result = 8/num
print(f'运算结果为{result}')
except ValueError:
print("请输入正确的整数!")
except ZeroDivisionError:
print("除0错误:0不能做除数!")
if __name__ == '__main__':
input_num()
'''
运行结果:
请输入整数:2
运算结果为4.0
请输入整数:0
除0错误:0不能做除数!
'''
5、捕获未知类型异常
(1)需求
-
提示用户输入一个整数
-
使用8除以用户输入的整数并且输出
-
要求:为了简化代码,统一捕获多有异常类型
(2)示例代码
def input_num():
try:
num = int(input('请输入整数:'))
result = 8/num
print(f'运算结果为{result}')
except Exception as y:
print("出错了:{}".format(y))
if __name__ == '__main__':
input_num()
'''
运行结果:
请输入整数:2.0
出错了:invalid literal for int() with base 10: '2.0'
请输入整数:0
出错了:division by zero
'''
6、异常捕获的完整语法
(1)需求
-
获取用户输入的数字
-
判断获取的数字是否整数
-
如果不是整数,提示输入错误
-
如果是整数,则进一步判断是奇数还是偶数
-
最终提示:程序运行结束
(2)示例代码
'''定义输入数据函数'''
def input_num():
try:
num = int(input('请输入数字:'))
except ValueError:
'''判断输入的数字是否是整数'''
print('输入错误!')
else:
if num % 2 == 0:
print('获取的数据为:{},是偶数!'.format(num))
else:
print('获取的数据为:{},是奇数!'.format(num))
finally:
print('程序运行结束!')
if __name__ == '__main__':
input_num()
'''
运行结果:
请输入数字:2.1
输入错误!
程序运行结束!
请输入数字:8
获取的数据为:8,是偶数!
程序运行结束!
'''
三、异常的传递
1、应用场景
-
当 函数/方法 执行出现异常,会将异常 传递给 函数/方法的调用一方
-
如果传递到主程序,仍然没有异常处理,程序才会终止
2、作用
-
保持代码整洁,不想增加大量的异常捕获代码
-
需要让外部知道出现了异常
-
异常比较严重,自己处理不了
3、异常传递的案例
(1)需求
-
定义函数demo1()提示用户输入一个整数并且返回
-
定义函数demo2()调用demo1()
-
在主程序调用demo2()
(2)示例代码
def demo1():
return int(input('请输入一个整数:'))
def demo2():
return demo1()
if __name__ == '__main__':
try:
print(demo2())
except ValueError:
print('请输入正确的整数')
except Exception as e:
print('异常错误信息为:{}'.format(e))
'''
运行结果:
请输入一个整数:2.1
请输入正确的整数
'''
四、抛出异常
1、应用场景
-
在开发中,除了代码执行出错Python解释器会 抛出 异常之外
-
还可以根据应用程序 特有的业务需求 主动抛出异常,例如
2、抛出异常语法
-
Python中提供了一个 Exception异常类
-
在开发时,如果满足特定业务需求时希望抛出异常,可以:
-
创建一个Exception类的对象,使用raise关键字抛出异常对象
-
3、抛出异常案例
(1)需求
-
定义input_password函数,提示用户输入密码
-
如果用户输入长度<8,抛出异常
-
如果用户输入长度>=8,返回输入的密码
(2)示例代码
def input_password():
password = input('请输入用户密码:')
if len(password) >= 8:
return password
ex = Exception('密码长度不够!')
raise ex
try:
user_password = input_password()
print(user_password)
except Exception as result:
print(f'发现错误:{result}')
'''
运行结果:
请输入用户密码:123
发现错误:密码长度不够!
请输入用户密码:12345678
12345678
'''
五、思考
1、什么是异常?
2、如何捕获异常?
3、如何没有捕获异常,异常会传递给谁?
4、如何主动抛出一个异常?