#魔术方法(会话管理)

### `__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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,385评论 4 16
  • 转载自:http://mp.weixin.qq.com/s/LO1yyFeUA6pR_YPyfDoSig 姓名:梅...
    虐先森阅读 1,494评论 0 1
  • 《冬夜》(外四首) 运城职业技术学院 王哲 稀星暗隐密云间,冷月孤凄染墨悬。寂静小园寒声碎,夜半萧风到户栏。
    陈侠女阅读 279评论 0 8
  • 瘦身第三天做了桑拿,瑜伽,教练带做了很多的运动。体重一点一点减下去,感觉自己慢慢很清爽,很飘逸。出现了久违的高原红...
    Jenny陈_7641阅读 305评论 0 0
  • 这从来全都是一个看脸的社会,不只现在是, 古代也是。 古时候男子上门提亲,如果长得帅,满意,女子就会掩面娇羞的说:...
    未来回忆俱乐部阅读 6,342评论 36 22

友情链接更多精彩内容