美文网首页
python with 详解

python with 详解

作者: 如果仲有听日 | 来源:发表于2020-03-03 12:43 被阅读0次

1. 先看一个例子

with open('./test.txt', 'wb') as f:

    f.write('aaaaaaaaaaaa')

上例等价于下面的代码:

f = open('./test.txt', 'wb')

try:

    f.write('aaaaaaaaaaaa')

except Exception:

    pass

finally:

    f.close

可见, 当使用with时,with open('./test.txt', 'wb') as f:

就是将open出来的文件描述符as为f,之后再对f进行写数据,写完数据后with这个上下文管理器会将f进行close, 并且能够捕获异常

因此with是一个上下文管理器

2. with上下文管理器原理

我们通过自定义一个类来理解with的原理。

class ContextManager(object):

    def __enter__(self): #进入with语句时调用

        print("__enter__ called")

    def __exit__(self, exc_type, exc_val, exc_tb): #离开with语句时调用

        print('__exit__ called')

        print('exc_type: %s' % exc_type) #异常类型

        print('exc_val: %s' % exc_val)        #异常值

        print('exc_tb: %s' % exc_tb)            #异常追踪信息

#debug1

with ContextManager() as cm:

    print('hello python')

#debug 2

with ContextManager() as cm:

    a = 1 / 0

    print('hello python')

    

相关文章

网友评论

      本文标题:python with 详解

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