572得票7回答
解释Python的'__enter__'和'__exit__'

我在别人的代码中看到了这个。它是什么意思? def __enter__(self): return self def __exit__(self, type, value, tb): self.stream.close() 这是完整的代码...

321得票4回答
在多个上下文管理器上创建一个“with”块?

假设您有三个对象通过上下文管理器获取,例如锁、数据库连接和IP套接字。 您可以通过以下方式获取它们:with lock: with db_con: with socket: #do stuff 但是有没有一种方法可以在一个代码块中完成呢?就像这样:w...

102得票6回答
如何在Python中编写一个空(无操作)的上下文管理器?

有时我需要一个虚拟的上下文管理器,它什么都不做。然后可以将其用作更有用但是可选的上下文管理器的替代品。例如: 有时我需要一个虚拟的上下文管理器,它什么都不做。然后可以将其用作更有用但是可选的上下文管理器的替代品。例如:ctx_mgr = <meaningfulContextManage...

80得票5回答
Python中同时充当装饰器和上下文管理器的函数是什么?

这可能有点过分,但大多出于好奇...是否有可能拥有一个可调用对象(函数/类),既充当上下文管理器又同时充当装饰器?def xxx(*args, **kw): # or as a class @xxx(foo, bar) def im_decorated(a, b): prin...

71得票6回答
在Python中,是否有一种好的惯用语用于在设置/拆卸中使用上下文管理器?

我发现我在Python中使用了大量的上下文管理器。不过,我一直在使用它们测试各种东西,而我经常需要以下内容:class MyTestCase(unittest.TestCase): def testFirstThing(self): with GetResource() as re...

65得票4回答
异步上下文管理器

我有一个异步API,用于连接并发送邮件到一个SMTP服务器,该服务器需要进行一些设置和拆卸,因此它很适合使用Python 3的contextlib中的contextmanager。 但是,我不知道是否可能编写,因为它们都使用生成器语法进行编写。 以下示例演示了问题(包含混合使用yield基...

60得票4回答
StringIO和'with'语句(上下文管理器)的兼容性问题

我有一些遗留的代码,其中包括一个以文件名作为参数并处理文件内容的遗留函数。下面是一个可行的代码示例。 我想做的是不必将我生成的某些内容写入磁盘,就可以使用这个遗留函数。因此,我认为可以使用 StringIO 来创建一个对象来代替实际的文件名。但是,如下所示,这样做是行不通的。 我认为使用 ...

56得票2回答
上下文管理器中的__init__和__enter__有什么区别?

据我了解,上下文管理器的__init__()和__enter__()方法各被调用一次,一个接一个地调用,中间没有机会执行其他代码。将它们分成两个方法的目的是什么,我应该在每个方法中放置什么内容? 编辑:抱歉,没有注意到文档。 编辑2:实际上,我感到困惑的原因是因为我在思考@context...

55得票2回答
“with”语句没有使用“as”关键字的含义

我熟悉使用Python的with语句,以确保在抛出异常时对象得到正确地清理。通常这看起来像:with file.open('myfile.txt') as f: do stuff... 这是简写,意为f = file.open('myfile.txt'): try: do st...

54得票3回答
如何在Python中使用socket作为上下文管理器?

看起来做这样的事情是很自然的:with socket(socket.AF_INET, socket.SOCK_DGRAM) as s: 但 Python 没有为 socket 实现上下文管理器。我可以轻松地将其用作上下文管理器吗?如果可以,怎么做?