了解python 异常处理,捕获未知异常以及自定义异常

Python3 错误和异常

没有异常处理机制

当我们敲代码时,总时会出现一些语法错误,执行时就会报错,提示我们是什么类型的错误。这时我们就要去修改错误,直到没有语法错误,程序就不会报错(逻辑错误是不会报错的,逻辑错误就是程序执行结果与要达到的要求不同)
Value Error:值错误
在这里插入图片描述
ZeroDivisionError:除零错误在这里插入图片描述

更多异常点击:等等这些错误

异常处理器 except

except 子句指定一个或多个异常处理器。 当 try 子句中没有发生异常时,没有异常处理器会被执行。 当 try 子句中发生异常时,将启动对异常处理器的搜索。 此搜索会依次检查 except 子句,直至找到与该异常相匹配的子句。 如果存在无表达式的 except 子句,它必须是最后一个;它将匹配任何异常。

代码示例

捕获错误类型

如果我们能够预知这些代码可能会出现什么样的错误,我们就可以直接捕获。

在这里插入图片描述


try:
    # 提示用户输入一个整数
    num = int(input("请输入一个整数:"))

    # 使用 8 初一用户输入的整数并且输出
    result = 8 / num
    print(result)

except ZeroDivisionError:
    print("除零错误")

except ValueError:
    print("请输入正确的整数")

except:
    print("其他错误")

但是我们有时候考虑不了那么全面,所以需要捕获未知的错误

捕获未知错误
try:
    # 提示用户输入一个整数
    num = int(input("请输入一个整数:"))

    # 使用 8 初一用户输入的整数并且输出
    result = 8 / num

    print(result)

# except ZeroDivisionError:
#     print("除零错误")

except ValueError:
    print("请输入正确的整数")

except Exception as result:
    print("未知错误 %s " % result)

使用
except Exception as result:
print("未知错误 %s " % result)
这种格式,就能够捕获未知错误了

完整的异常语法

在这里插入图片描述


try:
    # 提示用户输入一个整数
    num = int(input("请输入一个整数:"))

    # 使用 8 初一用户输入的整数并且输出
    result = 8 / num

    print(result)

# except ZeroDivisionError:
#     print("除零错误")

except ValueError:
    print("请输入正确的整数")

except Exception as result:
    print("未知错误 %s " % result)
else:
    # 没有异常才会执行的代码
    print("尝试成功")
finally:
    # 不论是否出现错误都会执行的代码
    print("不论是否出现错误都会执行的代码")

print("-" * 50)

在这里插入图片描述

异常具有传递性

def demo1():
    return int(input("输入整数:"))

def demo2():
    return demo1()


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

在这里插入图片描述

首先执行print()函数里的demo2()–> demo2()执行 demo1()函数 --> demo1()接收到字母a,出现语法错误。–>将错误传递返回demo2() --> demo2()函数将错误传递回print()函数–>触发异常机制,执行触发机制。
我展示一下去掉try: except: 时出现的报错情况
在这里插入图片描述

自定义异常

在这里插入图片描述

def input_password():

    # 1. 提示用户输入密码
    pwd = input("请输入密码:")

    # 2. 判断密码长度 >= 8 , 返回用户输入的密码
    if len(pwd) >= 8:
        return pwd

    # 3. 如果  < 8 主动抛出密码
    print("主动抛出异常")
    # 1. 创建异常对象
    ex = Exception("密码长度不够")

    # 2. 主动抛出异常
    raise ex


# 提示用户输入密码
while True:
    try:
        print(input_password())
        break
    except Exception as result:
        print("未知异常:%s" % result)
        print("请重新输入...")
print("提交密码")

如果密码不够长,告诉你密码长度不够
在这里插入图片描述
如果把try: except: 去掉,我们在输入密码:123,我们就能看见我们熟悉的界面了。

def input_password():

    # 1. 提示用户输入密码
    pwd = input("请输入密码:")

    # 2. 判断密码长度 >= 8 , 返回用户输入的密码
    if len(pwd) >= 8:
        return pwd

    # 3. 如果  < 8 主动抛出密码
    # print("主动抛出异常")
    # 1. 创建异常对象
    ex = Exception("密码长度不够")

    # 2. 主动抛出异常
    raise ex

print(input_password())

在这里插入图片描述

小总结

很多源代码都会使用try: expcpt: 因为这样就能让代码更健壮,更稳定。即使出现Bug也不会使程序崩溃,让客户的体验感更好写。所以在开发程序时,使用try: except: 这种异常处理机制使必不可少的!!!
interactiveshell.py的源代码截图
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是强筱华哇!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值