python-----异常

本文深入讲解Python中的异常处理机制,包括try...except语句的使用,如何捕获多个异常,异常传递,抛出自定义异常,以及异常处理中的抛出异常等核心概念。通过实例演示,帮助读者理解并掌握Python异常处理的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1)捕获异常 try....except....
把你觉得可能会出现异常的代码放到try里面,当try里面的代码执行出现异常后执行except里面的代码
在这里插入图片描述

except:表示不管出现什么异常,都执行except里面的代码
except 异常类型:出现了某种类型的异常时才执行里面的代码。
一个try可以跟多个except

try:
	可能会出现异常的代码
except 异常1:
	处理方式1
except 异常2:
	处理方式2
....

NameError 、IOError就是异常
在这里插入图片描述

举个栗子1:
在这里插入图片描述

在这里插入图片描述
当你在try中的代码一旦出现异常,立即会跳到except部分,并且只执行一次出现异常所对应的except的代码

举个栗子2:
except:放在最上面
在这里插入图片描述

執行結果會報錯,except:必須放在最後
在这里插入图片描述

(2)捕获多个异常

  • Python2 做法:将多个异常用逗号“,“隔开
try:
	...
except 异常1,异常2,异常3....:

在这里插入图片描述

在这里插入图片描述
try部分代码执行只匹配第一个异常,所以相对应的异常要写到前面,如果写到后面相当于没有匹配上,还是会报错:
在这里插入图片描述
在这里插入图片描述

  • Python3捕获多个异常:
    将异常写在元组里面,并且用逗号“,“隔开。
    而且这种写法对异常的顺寻没有要求,python2也可以使用这种写法。
    在这里插入图片描述
    在这里插入图片描述

3、异常传递

def test1():
    print("-------1.1-------")
    print(num)
    print("--------1.2-------")

def test2():
    print("-------2.1-------")
    test1()
    print("-------2.2-------")

def test3():
    try:
        print("------3.1----")
        test1()
        print("------3.2----")

    except Exception as result:
        print("bu huo dao l yichang")
test3()
[root@mail python]# python chuandiyichang.py 
------3.1----
-------1.1-------
bu huo dao l yichang

在此代码中,执行test3是里面调用了test1,执行test1时遇到了异常,所以这里做了捕获异常处理,处理完整后直接退出整个程序,相当于return(一、返回结果 二、结束程序)

4、抛出自定义的异常

class Test(Exception):
    def __init__(self,length,atleast):
        self.length = length
        self.atleast = atleast
    #input("输入一个字符串:")
try:
    raise Test(1,2)
except Test as  haha:
    print(haha.length)
    print("haha")

自定义异常的父类必须是Exception,将类所产生的对象保存在haha中。

【注意】Exception可以捕获到所有异常类型
5、异常处理中的抛出异常

class Test(object):
    def __init__(self,switch):
        self.switch = switch
    def calc(self,a,b):
        try:
            return a/b
        except Exception as result:
            if self.switch:
                print("捕获开启,已经捕获到异常,信息如下:")
                print(result)
            else:
                raise

a = Test(True)
a.calc(1,0)
print("----------------------------------------------------------")
a.switch = False
a.calc(1,0)

在此代码中,else 部分直接写了一个raise,表示捕获到异常后啥都不干,直接将其扔出去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值