gpt4 book ai didi

python - python 中的 "with"语句 __exit__

转载 作者:太空宇宙 更新时间:2023-11-03 12:33:30 24 4
gpt4 key购买 nike

当使用不带 aswith 语句时,__enter__ 函数永远不会执行,但 __exit__方法会?

例子:

with test:
test.do_something

test.__exit__() 将在 with 子句的末尾执行,但 test.__enter__() 不会?

最佳答案

它们总是*都被执行。唯一的区别是,如果您不使用 as,则 __enter__ 函数的返回值将被丢弃。 with statement documentation 中详细列出了精确的步骤.

class T(object):
def __enter__(self):
print('entering')
return self
def __exit__(self, exc_t, exc_v, trace):
print('exiting')

with T():
pass

>>> entering
>>> exiting

唯一的区别是您是否可以使用创建的对象:

with T() as t:
print(t)

>>> entering
>>> <__main__.T object at 0x00B34810>
>>> exiting

请注意,第二个示例还显示了 何时 __exit__ 被调用:具体来说,它在循环完成时被调用。


*它们唯一没有同时执行的情况是 __enter__ 抛出异常,在这种情况下,上下文管理器的套件永远不会到达,__exit__ 也不会被调用。

关于python - python 中的 "with"语句 __exit__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17076106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com