美文网首页
#魔术方法(会话管理)

#魔术方法(会话管理)

作者: 97833632c0c7 | 来源:发表于2018-06-01 13:04 被阅读0次

    ### `__enter__`魔术方法:

    使用`with`语句的时候,会调用这个魔术方法,这个方法的返回值可以作为`as xx`的值。

    示例:

    ```python

    with FileOpener('xxx.txt','w') as fp:

        pass

    ```

    ### `__exit__(self,exc_type,exc_val,exc_tb)`魔术方法:

    1. 执行完这个`with`语句中的代码块或者是这个代码块中的代码发生了异常,就会执行这个方法。可以在这个方法中做一些清理工作。比如关闭文件等。

    2. 如果在`with`语句中发生了异常,那么`exc_type`和`exc_val`将会存储这个异常的信息,如果没有任何异常,那么他们的值为`None`。

    3. 如果在`with`语句中发生了异常,那么会执行`__exit__`方法,但是如果你不想让这个异常抛出`with`代码块,那么你可以返回`True`,就不会把异常抛出到外面了。

    #encoding: utf-8

    class FileOpener(object):

        def __init__(self,filename,mode):

            self.filename = filename

            self.mode = mode

        def __enter__(self):

            self.fp = open(self.filename,self.mode)

            print('__enter__')

            return self.fp

        def __exit__(self, exc_type, exc_val, exc_tb):

            self.fp.close()

            # print('__exit__')

            print(exc_type)

            print(exc_val)

            print(exc_tb)

            # 如果不想抛出异常,那么返回True,会自动的吸收这个异常

            return True

    with FileOpener('abc.txt','w') as fp:

        fp.write('hello world')

        a = 1

        c = a/0

    相关文章

      网友评论

          本文标题:#魔术方法(会话管理)

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