• Python之异常处理语句



    一、前言

      在程序开发时,有些错误并不是每次运行都会出现。只要输入的数据符合程序的要求,程序就可以正常运行;但如果输入的不符合程序要求,就会抛出异常并停止运行。这时,就需要在开发程序时对可能出现异常的情况进行处理。下面将详细介绍Python中提供的异常处理语句。


    二、try…except 语句

      在Python中,提供了try…except语句捕获异常。在使用时,把可能产生异常的代码放在try语句块中,把处理结果放在except语句块中,这样,当try语句块中的代码出现错误,就会执行except语句块中的代码,如果try语句块中的代码没有报错,那么except语句块将不会执行。具体语法格式如下:

    try:
    	block1
    except [ExceptionName [as alias]]:
    	block2
    
    • 1
    • 2
    • 3
    • 4

      参数说明:

    • block1:表示可能出现错误的代码块 。
    • ExceptionName [as alias]:可选参数,用于指定要捕获的异常。其中,ExceptionName表示要捕获的异常名称,如果在其右侧加上“as alias”,则表示为当前的异常指定一个别名,通过该别名,可以记录异常的具体内容。

    说明 :在使用try…except语句捕获异常时,如果except后面不指定异常名称,则表示捕获全部异常。

    • block2:表示进行异常处理的代码块。在这里可以输出固定的提示信息,也可以通过别名输出异常的具体内容。

    说明 :使用try…except语句捕获异常后,当程序出错时,输出错误信息后,程序会继续执行。

      例如,在执行除法运算时,对可能出现的异常进行处理,代码如下:

    def division():
        num1 = int(input("请输入被除数:"))  # 用户输入提示,并记录
        num2 = int(input("请输入除数:"))
        result = num1 // num2  # 执行除法运算
        print(result)
    
    
    if __name__ == "__main__":
        try:  # 捕获异常
            division()  # 调用函数
        except ZeroDivisionError:  # 处理异常
            print("输入错误:除数不能为0")  # 输出错误原因
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    三、try…except…else 语句

      在Python中,还有另外一种异常处理结构,它是try…except…else 语句,也就是在原来try…except语句的基础上再添加一个else句子,用于指定当try语句模块中没有出现异常时要执行的语句块。该语句块中的内容在try语句中发现异常时,将不被执行。例如,在执行除法运算时,实现当division()函数执行时没有抛出异常时,输出文字“程序执行完毕……”,代码如下:

    def division():
        num1 = int(input("请输入被除数:"))  # 用户输入提示,并记录
        num2 = int(input("请输入除数:"))
        result = num1 // num2  # 执行除法运算
        print(result)
    
    
    if __name__ == "__main__":
        try:  # 捕获异常
            division()  # 调用函数
        except ZeroDivisionError:  # 处理异常
            print("\n错误了:除数不能为0")  # 输出错误原因
        except ValueError as e:  # 处理ValueError异常
            print("输入错误", e)  # 输出错误原因
        else:
            print("程序执行完成……")  # 没有异常时执行
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

      执行上面代码,将显示如下图所示:

    在这里插入图片描述


    四、try…except…finally 语句

      完整的异常处理语句应包含finally代码模块,通常情况下,无论程序中有无异常产生,finally代码块中的代码都会被执行。基本格式如下:

    try:
    	block1
    except [ExceptionName [as alias]]:
    	block2
    finally:
    	block3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

      对于try…except…finally 语句的理解并不复杂,它只是比try…except语句多了一个finally代码快,如果程序中有一些在任何情况中都必须执行的代码,那么就可以将它们放在finally语句的区块中。

    说明 :使用except句子是为了允许处理异常。无论是否引发了异常,使用finally子句都可以执行。如果分配了有限的资源(如打开文件),则应该将释放资源的代码放置在finally语句的区块中。

      例如,在执行除法运算时,实现当division()函数在执行时无论是否抛出异常,都输出文字“释放资源,并关闭”。修改后的代码如下:

    def division():
        num1 = int(input("请输入被除数:"))  # 用户输入提示,并记录
        num2 = int(input("请输入除数:"))
        result = num1 // num2  # 执行除法运算
        print(result)
    
    
    if __name__ == "__main__":
        try:  # 捕获异常
            division()  # 调用函数
        except ZeroDivisionError:  # 处理异常
            print("\n错误了:除数不能为0")  # 输出错误原因
        except ValueError as e:  # 处理ValueError异常
            print("输入错误", e)  # 输出错误原因
        else:
            print("程序执行完成……")  # 没有异常时执行
        finally:  # 无论是否抛出异常都执行
            print("释放资源,并关闭")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

      执行代码,将显示如下图所示:

    在这里插入图片描述
      至此,已经介绍了异常处理语句的try…except、try…except…else 、try…except…finally等形式。下面通过下图说明异常处理的各个句子的执行关系。

    在这里插入图片描述


    五、使用raise 语句抛出异常

      如果某个函数或方法可能会产生异常,但不想在当前函数或方法中处理这个异常,则可以使用raise 语句在函数或方法中抛出异常。raise语句的基本格式如下:

    raise [ExceptionName[(reason)]]
    
    • 1

      其中,ExceptionName[(reason)]为可选参数,用于指定抛出的异常名称,以及异常信息的相关描述。如果省略,就会把当前信息的错误原样抛出。

    说明 :ExceptionName[(reason)]参数中的(reason)也可以省略,如果省略,则在抛出异常时,不附带任何描述信息。

      例如,在执行除法运算时,在division()函数中实现,当除数为0时,应用raise语句抛出一个ValueError异常,接下来在最后一行语句的下方添加except语句处理ValueError异常,代码如下:

    def division():
        num1 = int(input("请输入被除数:"))  # 用户输入提示,并记录
        num2 = int(input("请输入除数:"))
        if num2 == 0:
            raise ValueError("除数不能为0")
        result = num1 // num2  # 执行除法运算
        print(result)
    
    
    if __name__ == "__main__":
        try:  # 捕获异常
            division()  # 调用函数
        except ZeroDivisionError:  # 处理异常
            print("\n错误了:除数不能为0")  # 输出错误原因
        except ValueError as e:  # 处理ValueError异常
            print("输入错误", e)  # 输出错误原因
        else:
            print("程序执行完成……")  # 没有异常时执行
        finally:  # 无论是否抛出异常都执行
            print("释放资源,并关闭")
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

  • 相关阅读:
    #案例:演示鼠标api!#演示:鼠标单击#演示:鼠标双击#演示:鼠标拖拽#演示:鼠标悬停!
    若依框架解读(微服务版)—— 3.验证码与登录
    【DL】基于卷积神经网络的一维数据二分类预测
    GCC Arm 12.2编译提示 LOAD segment with RWX permissions 警告
    Codeforces Round 856 (Div. 2)C
    SPASS图表的制作
    服务器硬件得基础知识介绍
    IAR 下的雅特力AT32F415CBT7工程创建与设置
    快速实现一个企业级域名 SSL 证书有效期监控巡检系统
    kdxf speex
  • 原文地址:https://blog.csdn.net/weixin_45191386/article/details/126755910