Python程序异常处理:try、except、else、finally,捕获指定异常类型、捕获多个异常类型、捕获所有异常类型、捕获异常信息、异常的传递、raise抛出自定义异常

本文详细介绍了Python中的异常处理机制,包括使用try-except处理错误,捕获特定和多个异常类型,获取异常信息,捕获所有异常,异常传递,以及如何raise抛出自定义异常。通过实例展示了在猜数字游戏和二分查找法中应用异常处理,强调了finally在资源释放和避免异常丢失中的作用,并提醒了在finally中使用return的注意事项。
摘要由CSDN通过智能技术生成

输入与预期不匹配,触发异常,程序退出:
在这里插入图片描述

一、异常处理:使用try、except进行错误处理

为了保证程序运行的稳定性,错误应该被程序捕捉并合理控制

  • Python使用保留字try和except进行异常处理。
    在这里插入图片描述
  • 语句块1是正常执行的程序内容,当执行这个语句块发生异常时,即执行except后面的语句块2
try:
    n = eval(input("请输入一个数字:"))
    print("输入数字的3次方值为:", n ** 3)
except:
    print("输入错误,请输入一个数字!")

请输入一个数字:abc
输入错误,请输入一个数字!

二、异常处理:使用try、except处理程序运行错误

以下语句发生除零的情况,程序报错:
在这里插入图片描述
捕捉错误:

try:
    for i in range(4):
        print(10 / i, end="")
except:
    print("某种原因,出错了!")
某种原因,出错了!

三、异常处理:使用try、except处理特定的错误类型

在except后指明错误类型,大小写敏感。

try:
    for i in range(5):
        print(10/i, end="")
except ZeroDivisionError:
    print("除数为零,产生了除零错误!")
except:
    print("某种原因,出错了!")

编写程序中,建议在输入合规性判断、保证关键代码可靠性等方面广泛使用异常处理机制。

四、捕获多个异常类型

当捕获多个异常时,可以把要捕获的异常类型的名字,放到except 后,并使⽤元组的⽅式进⾏书写。

try:
    print(1/0)  # 如果没有异常,执行的语句
except (NameError, ZeroDivisionError):  # 可能的异常类型
    print("there is an error.")  # 如果出现异常,执行的语句

五、捕获异常描述信息

print(1/0)

输出:
在这里插入图片描述

捕获异常信息:except 异常类型 as 变量名:,然后打印变量名

try:
    print(1/0)
except (NameError, ZeroDivisionError) as result:
    print(result)

输出:
在这里插入图片描述

六、捕获所有异常

**Exception是所有程序异常类的⽗类。**不需要书写具体的异常类型了。

  • Exception大小写敏感
try:
    print(1/0)
except Exception as result:
    print(result)

输出:
在这里插入图片描述

七、try、except高级用法

在这里插入图片描述

  1. 执行逻辑:Python先执行语句块1,如果语句块1不发生异常则奖励性地执行else语句块3;如果发生了异常则执行except语句块2;无论是否发生异常,最后都要执行finally语句块4.
  2. 一个这样写的理由是:如果finally里有一个语句可能会发生异常,你可以把这个可能的异常放在外层,在外层来处理掉它,让finally语句顺利final。用来测试程序是不是考虑周全可以final了。
  3. 反对这种写法的一个理由是:在很多情况下,异常处理器需要做一些扫尾工作。
  4. 一个最终的注意点:如果 finally 中的代码引发了另一个异常或由于 return,break,continue 语法而终止,原来的异常将丢失而且无法重新触发。
try:
    print(1)
except Exception as result:
    print(result)
else:
    print("我是else,是没有异常的时候执⾏的代码")

输出:
1
我是else,是没有异常的时候执⾏的代码
try:
    f = open("test.txt", "r"
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值