持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情
1. 异常的传递
- 异常的传递--当函数/方法执行出现异常,会将异常传递给函数/方法的调用一方
- 如果传递到主程序,仍然没有异常处理,程序才会被终止
关于异常传递的提示:
- 在开发中,可以在主函数中增加异常捕获
- 而在主函数中调用的其他函数,只要出现异常,都会传递到主函数的异常捕获中
- 这样就不需要在代码中,增加大量的异常捕获,能够保证代码的整洁
🔥 案例需求:
- 定义函数demo1()提示用户输入一个整数并且返回
- 定义函数demo2()调用demo1()
- 在主程序中调用demo2() 🔥 代码演示如下所示:当所有的函数开发完成,我们可以在主程序中,根据具体的错误类型,进行异常的捕获。这样,我们的注意力集中在函数开发本身,降低开发的工作量。
def demo1():
return int(input("输入整数:"))
def demo2():
return demo1()
# 利用异常的传递性,在主程序捕获异常
try:
print(demo2())
except Exception as result:
print("未知错误 %s" % result)
🔥 运行结果如下图所示:当输入一个字符时,字符并不符合输入整数规定。得到如下结果。
2. 抛出异常
应用场景:
- 在开发中,除了代码执行出错Python解释器会抛出异常之外
- 还可以根据应用程序特有的业务需求主动抛出异常 示例:
- 提示用户输入密码,如果长度少于8,抛出异常 注意:
- 当前函数只负责提示用户输入密码,如果密码长度不正确,需要其他的函数进行额外处理
- 因此可以抛出异常,由其他需要处理的函数捕获异常 Python中提供了一个Exception异常类
在开发时,如果满足特定业务需求时,希望抛出异常,可以:
- 创建一个
Exception的对象 - 使用
raise关键字抛出异常对象 🚀 案例需求:
- 定义input_password函数,提示用户输入密码
- 如果用户输入长度<8,抛出异常
- 如果用户输入长度>=8,返回输入的密码 🚀 代码演示如下所示:
def input_password():
# 1. 提示用户输入密码
pwd = input("请输入密码:")
# 2. 判断密码长度>=8,返回用户输入的密码
if len(pwd) >= 8:
return pwd
# 3. 如果<8主动抛出异常
print("主动抛出异常")
# 1> 创建异常对象--可以使用错误信息字符串作为参数
ex = Exception("密码长度不够")
# 2> 主动抛出异常
raise ex
# 提示用户输入密码
try:
print(input_password())
except Exception as result:
print(result)
🚀 运行结果如下图所示:要想主动抛出异常,先来创建一个异常对象,然后使用raise关键字把异常对象做一个抛出。
创建异常对象的时候可以使用错误信息字符串作为参数,在调用函数一方,捕获异常的时候,直接输出就能够把创建对象指定的描述信息输出在控制台。