python-guide icon indicating copy to clipboard operation
python-guide copied to clipboard

c06/c06_05

Open utterances-bot opened this issue 2 years ago • 2 comments

6.5 【进阶】异常处理的三个好习惯 — Python中文指南 1.0 documentation

https://python.iswbm.com/c06/c06_05.html

utterances-bot avatar Aug 28 '23 04:08 utterances-bot

可以,非常好,用到再说

coldBoy001 avatar Aug 28 '23 04:08 coldBoy001

这样的话,我以后再也不用 try except 捕异常了,只用上下文管理器了

class Resource():
    def __enter__(self):
        print('上下文管理器打开了')
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        # 异常由 __exit__ 处理,当发生异常时:
        #     exc_type  是异常类型
        #     exc_val   是异常值
        #     exc_tb    是错误栈信息
        # 若返回 True,则表示异常已被处理,不会抛出任何异常
        # 若返回 False,则当发生异常时,会抛出

        # 可以判断异常类型,进行处理
        if exc_type == None:
            print('未发生异常,上下文管理器正常关闭')
            return True
        elif exc_type == ZeroDivisionError:
            print(f'发生错误,除零:{exc_val}')
            return True
        elif isinstance(exc_val, FileNotFoundError):
            print('发生错误,文件不存在:{exc_val}')
        else:
            # 最后返回一个 False,当遇到其它类型错误时,会抛出
            # 它和 raise exc_val 是等价的
            return False

with Resource() as res:
        1 / 0
        open('not_exist.txt')

HaujetZhao avatar Jan 11 '24 02:01 HaujetZhao