Python 异常

本文详细介绍了Python中自定义异常的创建和处理方法,包括raise语句的使用及环境管理协议with/as语句的工作原理。通过实例展示了如何利用with语句确保资源的正确管理和异常情况下的优雅处理。

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

1、用户自定义异常

class Bad(Exception):
    pass

def gotBad():
    raise Bad()

try:
    gotBad()
except Bad as b:
    print("gotBad")
else:
    pass # 没发生异常时执行
finally:
    pass # 无论有没有异常都会执行

  空的except语句捕捉一切异常

2、raise语句不包括异常名称或额外数据值时,就会重新触发异常。

3、环境管理协议:with/as语句

  (1)环境管理器必须有__enter__和__exit__方法

  (2)环境管理器的__enter__方法会被调用,如果有as子句,则会将返回值赋给子句中的变量,否则,直接丢弃

  (3)代码块中嵌套的代码会执行。

  (4)如果with代码块引发异常,__exit__(type,value,traceback)方法会被调用。如果此方法返回值为假,就会重新引发异常,否则异常会终止。正常情况下异常应该是被重新引发,这样的话才能传递到with语句之外

  (5)如果with代码块没有引发异常,__exit__方法依然会被调用,所有参数都会以None传递。

class TraceBack:
    def method(self):
        print("method run")
    def __enter__(self):
        print("enter method")
        return self
    def __exit__(self,exc_type,exc_value,exc_tb):
        if exc_type is None:
            print("no exception")
        else:
            print("exception")
            return False

if __name__ == "__main__":
    with TraceBack() as action:
        action.method()
        print("finished")

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值