Python-异常的传递

108 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情

1. 异常的传递

  • 异常的传递--当函数/方法执行出现异常,会将异常传递给函数/方法的调用一方
  • 如果传递到主程序,仍然没有异常处理,程序才会被终止

关于异常传递的提示:

  • 在开发中,可以在主函数中增加异常捕获
  • 而在主函数中调用的其他函数,只要出现异常,都会传递到主函数的异常捕获中
  • 这样就不需要在代码中,增加大量的异常捕获,能够保证代码的整洁

🔥 案例需求:

  1. 定义函数demo1()提示用户输入一个整数并且返回
  2. 定义函数demo2()调用demo1()
  3. 在主程序中调用demo2() 🔥 代码演示如下所示:当所有的函数开发完成,我们可以在主程序中,根据具体的错误类型,进行异常的捕获。这样,我们的注意力集中在函数开发本身,降低开发的工作量。
def demo1():
    return int(input("输入整数:"))


def demo2():
    return demo1()


# 利用异常的传递性,在主程序捕获异常
try:
    print(demo2())
except Exception as result:
    print("未知错误 %s" % result)

🔥 运行结果如下图所示:当输入一个字符时,字符并不符合输入整数规定。得到如下结果。

image.png

2. 抛出异常

应用场景:

  • 在开发中,除了代码执行出错Python解释器会抛出异常之外
  • 还可以根据应用程序特有的业务需求主动抛出异常 示例:
  • 提示用户输入密码,如果长度少于8,抛出异常 注意:
  • 当前函数只负责提示用户输入密码,如果密码长度不正确,需要其他的函数进行额外处理
  • 因此可以抛出异常,由其他需要处理的函数捕获异常 Python中提供了一个Exception异常类

在开发时,如果满足特定业务需求时,希望抛出异常,可以:

  1. 创建一个Exception的对象
  2. 使用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关键字把异常对象做一个抛出。

创建异常对象的时候可以使用错误信息字符串作为参数,在调用函数一方,捕获异常的时候,直接输出就能够把创建对象指定的描述信息输出在控制台。

image.png