爱上python系列------python上下文管理器(二):对suppress进行装饰器重新实现

本文介绍Python中使用contextlib模块的suppress方法简化异常处理的过程。通过上下文管理器,可以更优雅地忽略特定类型的异常,避免复杂的try-except结构。文章还提供了一个改进版的suppress装饰器实现。

python上下文管理器可以做的事情简直不能太多

这不,官方的文档实现了一个方法suppress,用于处理异常

from contextlib import suppress

with suppress(FileNotFoundError):
    os.remove('somefile.tmp')

with suppress(FileNotFoundError):
    os.remove('someotherfile.tmp')

接着文档指出上面的代码等同于:

try:
    os.remove('somefile.tmp')
except FileNotFoundError:
    pass

try:
    os.remove('someotherfile.tmp')
except FileNotFoundError:
    pass

我查了suppress的源码,实现其实很简单:

class suppress(ContextDecorator):
    def __init__(self, *exceptions):
        self._exceptions = exceptions
    def __enter__(self):
        pass
    def __exit__(self, exctype, excinst, exctb):
        return exctype is not None and issubclass(exctype, self._exceptions)

就是利用上下文管理器在实现的,不过我不满意的是没有使用装饰器,每次要使用suppress必须要加with 

于是实现了一版带带装饰器的:

import os
fr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值