zoukankan      html  css  js  c++  java
  • python 异常

    一、异常的概念&异常处理的目的

    程序在运行时,如果 Pyhon解释器 遇到一个错误,会停止程序的执行,并且提示一些错误,这就是异常。

    程序开发时,很难将所有的特殊情况都处理的面面俱到,通过异常捕获可以针对突发事情做集中的处理,从而保证程序的稳定性和健壮性

    二、处理已捕获的异常

    根据捕获的不同异常,分别对异常进行处理,如果异常不在except预期的异常范围类,则同样会抛出异常

    while True:
        try:
            num = int(input("请输入数字:"))
            result = 10/num
            print(F"result结果为:{result}")
            break
        except ValueError:
            # 处理非int类型错误
            print("请输入整数")
        except ZeroDivisionError:
            # 处理除数为0的错误
            print("输入的数字不能为0")

    输出结果:

    请输入数字:a
    请输入整数
    请输入数字:0
    输入的数字不能为0
    请输入数字:10
    result结果为:1.0

     三、捕获未知异常

    在开发时,要预判到所有可能出现的错误,还是有一定难度的。如果希望程序无论出现任何错误,

    都不会因为python解释器抛出异常而被终止,可以再增加一个捕获未知错误的except。

    # 假如只捕获到ValueError
    while True:
        try:
            num = int(input("请输入数字:"))
            result = 10/num
            print(F"result结果为:{result}")
            break
        except ValueError:
            # 处理非int类型错误
            print("请输入整数")
        except Exception as e:
            # 处理未知错误,防止解释器抛出异常而被终止运行
            print(F"未知错误:{e}")

    输出结果:

    请输入数字:a
    请输入整数
    请输入数字:0
    未知错误:division by zero
    请输入数字:1
    result结果为:10.0

     四、异常处理的完整语法

    try:
        # 尝试执行的代码
        pass
    except 错误类型1:
        # 针对错误类型1,对应的处理代码
        print("针对错误类型1,对应的处理代码")
    except 错误类型2:
        # 针对错误类型2,对应的处理代码
        print("针对错误类型2,对应的处理代码")
    except Exception as e:
        # 针对未知错误类型,对应的处理代码
        print(F"未知错误:{e}")
    else:
        # 没有异常才会执行的代码
        print("没有异常才会执行的代码")
    finally:
        # 无论是否有异常,都会执行的代码
        print("无论是否有异常,都会执行的代码")

     五、使用raise主动抛出异常

    在开发中,除了代码执行出错python解释器抛出异常之外,还可以根据应用程序特有的业务需求主动抛出异常。

    比如设置密码要求长度大于8位,不足8位则主动抛出异常。

    def set_password():
        # 1、提示用户输入密码
        pwd = input("请设置长度不小于8的密码:")
        # 2、判断用户密码长度>=8,返回用户输入密码
        if len(pwd) >= 8:
            print(F"密码设置成功:{pwd}")
            return
        # 3、如果<8 主动抛出异常
        #   1) 创建异常对象
        ex = Exception("密码长度不足8位,请重新输入")
        #   2) 主动抛出异常
        raise ex
    
    
    # 捕获主动抛出的异常,并处理
    while True:
        try:
            set_password()
            break
        except Exception as e:
            print(F"主动抛出异常结果为:{e}")

    输出结果:

    请设置长度不小于8的密码:123
    主动抛出异常结果为:密码长度不足8位,请重新输入
    请设置长度不小于8的密码:12345678
    密码设置成功:12345678

     六、获取异常全部信息

    import traceback
    
    try:
        os.getcwd('exc')
    except Exception:
        exc = traceback.format_exc()
        print("="*100)
        print(exc)
        print("="*100)

  • 相关阅读:
    CF1270H
    CF1305G
    LeetCode-Sqrt(x)
    LeetCode-Plus One
    LeetCode-Integer to Roman
    LeetCode-Roman to Integer
    LeetCode-String to Integer (atoi)
    LeetCode-Reverse Integer
    C++
    LeetCode-Gray Code
  • 原文地址:https://www.cnblogs.com/testlearn/p/11751706.html
Copyright © 2011-2022 走看看