美文网首页
Python 中 __enter__ __exit__ 方法

Python 中 __enter__ __exit__ 方法

作者: Paycation | 来源:发表于2018-05-17 20:35 被阅读333次
    class A:
        def __enter__(self):
            return '%s is good' % self
        def __exit__(self, exc_type, exc_value, traceback):
            if exc_type == ZeroDivisionError:
                print(exc_value)
                print(traceback)
                return True
            elif exc_type == IndexError:
                print(exc_value, type(exc_value))
                print(traceback)
                return True
    
    with A():
        a = []
        a[0]
    # 输出
    list index out of range <class 'IndexError'>
    <traceback object at 0x10b1e9548>
    

    __enter__

    __enter__ 用于赋值给 as 后面的变量。不过 with 语句中 as 不是必须的。__enter__ 和 __exit__ 必须并用。

    __exit__

    用于捕获异常,它的返回值是一个 boolean 对象。除了 self 之外,必须传入另外三个参数,分别表示 exception 的类型,值(如 IndexError: list index out of range 中,冒号后面的部分就是值),以及 traceback。
    返回 True 则表示这个异常被忽略。
    返回 None, False 等则这个异常会抛出。
    如果要忽略所有的异常可以这样写:

    def __exit__(self, exc_type, exc_value, traceback):
        return True
    

    经过测试, SyntaxError 是不能忽略的,其他已知的是可以的。

    相关文章

      网友评论

          本文标题:Python 中 __enter__ __exit__ 方法

          本文链接:https://www.haomeiwen.com/subject/iisidftx.html