contextmanager相关内容

Python__Enter__/__Exit__vs__init__(或__new__)/__del__

我已经搜索过了,但我找不出任何好的理由来使用python的__enter__/__exit__而不是__init__(或__new__?)/__del__。 我知道__enter__/__exit__旨在与with语句一起用作上下文管理器,with语句非常好。但与此对应的是,这些块中的任何代码都只在该上下文中执行。通过使用这些而不是__init__/__del__,我似乎是在与调用者创建一个他们 ..
发布时间:2022-05-19 11:38:55 Python

Python2.7 contextlib.ExitStack 等效

为了以编程方式组合上下文管理器,我使用以下代码: == helpers.py == 从 contextlib 导入嵌套进口模拟def multiple_patch(obj_to_be_patch,*方法):返回嵌套(*[mock.patch.object(obj_to_be_patch, method) 用于方法中的方法]) == 测试.py == def test_foo(self) ..
发布时间:2022-01-08 22:09:26 其他开发

上下文管理器的类型提示

我想要一个 pyplot 图形的上下文管理器,本质上是这样的: from contextlib import contextmanager导入 matplotlib.pyplot 作为 plt@contextmanager定义子图():(fig, ax) = plt.subplots()尝试:产量(无花果,斧头)最后:plt.close(图) 可以为返回的元组实现类型提示吗?天真 导入输入d ..
发布时间:2021-09-11 19:54:12 其他开发

python contextmanager换行问题

使用 Python 的 contextmanager 我想生成一个包装器显示某个代码块的类似 Linux 的进度: 做某事...完成.[42 毫秒] 这是有效的 - 有点: from contextlib import contextmanager导入时间@contextmanager定义味精(米):打印(米+“...",结束='')t_start = time.time()屈服t_ ..
发布时间:2021-06-28 19:38:56 Python

如何在上下文管理器的 __exit__ 中操作异常?

我知道从上下文管理器的 __exit__() 方法中重新引发异常是一种糟糕的风格.因此,我想在实例上添加一个属性,该属性可以携带上下文信息,如果我让异常涓涓细流或捕获它,则该属性将不可用.这将避免重新加注. 在异常上添加属性的替代方法是吞下异常,在兼作相关上下文管理器的实例上设置一些状态,然后检查该状态.问题是这会导致捕获 22,不是吗?由于异常意味着正在退出 with 块内的执行.除了再次 ..
发布时间:2021-06-26 20:34:53 Python

StringIO 和与 'with' 语句的兼容性(上下文管理器)

我有一些带有遗留函数的遗留代码,它将文件名作为参数并处理文件内容.代码的工作传真如下. 我想要做的是不必将我生成的一些内容写入磁盘以使用此遗留函数,所以我虽然我可以使用 StringIO 来创建一个对象来代替物理文件名.但是,这不起作用,如下所示. 我认为 StringIO 是解决这个问题的方法.谁能告诉我是否有办法使用这个遗留函数并在参数中传递一些不是磁盘上的文件但可以被遗留函数视为 ..
发布时间:2021-06-26 20:32:29 Python

python `with` 语句用法的其他内置或实际示例?

在 __enter__ 和 __exit__ 用例的 python 文件对象实现之外,有人有真实世界的例子吗?最好是你自己的,因为我想要实现的是一种更好的方式来概念化将使用它的情况. 我已经阅读了这个. 而且,这里是 Python 文档的链接. 解决方案 有许多用途.就在我们的标准库中: sqlite3;使用 连接作为上下文管理器 表示提交或中止事务. unittest ..
发布时间:2021-06-26 19:39:33 Python

为什么我的 contextmanager 函数不像 python 中的 contextmanager 类那样工作?

在我的代码中,我需要能够正确打开和关闭设备,因此需要使用上下文管理器.虽然上下文管理器通常被定义为具有 __enter__ 和 __exit__ 方法的类,但似乎也有可能装饰一个与上下文管理器一起使用的函数(参见 最近的一篇文章 和这里还有一个很好的例子a>). 在以下(工作)代码片段中,我实现了两种可能性;一个只需要将注释行与另一个交换: 导入时间导入上下文库定义设备():返回 42@c ..
发布时间:2021-06-26 18:58:51 Python

如何在 Python 中使用套接字作为上下文管理器?

这样做似乎很自然: with socket(socket.AF_INET, socket.SOCK_DGRAM) as s: 但是 Python 没有为套接字实现上下文管理器.我可以轻松地将它用作上下文管理器吗?如果可以,如何使用? 解决方案 socket 模块相当低级,让您几乎可以直接访问 C 库功能. 您始终可以使用 contextlib.contextmanager装饰器 ..
发布时间:2021-06-25 20:47:43 Python

尝试使用语句和上下文管理器理解 python

我对此很陌生,只是想了解 with 语句.我知道它应该替换 try/except 块. 现在假设我做这样的事情: 尝试:name='rubicon'/2 # 引发异常除了作为 e 的例外:打印“不不可能"最后:打印“好的,我抓住了你" 如何用上下文管理器替换它? 解决方案 with 并没有真正取代 try/except,但是,相反,try/finally.尽管如此,您可以让上下文 ..
发布时间:2021-06-25 20:16:31 Python

创建一个“与"阻止几个上下文管理器?

假设您通过上下文管理器获取了三个对象,例如一个锁、一个数据库连接和一个 ip 套接字.您可以通过以下方式获取它们: 带锁:使用 db_con:带插座:#做东西 但是有没有办法在一个街区内做到这一点?类似的东西 带锁,db_con,socket:#做东西 此外,是否有可能,给定具有上下文管理器的未知长度的对象数组,是否有可能以某种方式执行: a=[lock1, lock2, lock3, ..
发布时间:2021-06-25 19:18:00 Python

py.test - 如何在 funcarg/fixture 中使用上下文管理器

密切相关: 在 python 中,是否有在设置/拆卸中使用上下文管理器的好习惯 我有一个上下文管理器,用于在测试中修复时间/时区.我想把它放在一个 pytest funcarg (或夹具,我们使用 pytest 2.2.3 但我可以向后翻译).我可以这样做: def pytest_funcarg__fixedTimezone(request):# 修复时区以匹配 Qld,无需担心 DST ..
发布时间:2021-06-25 18:48:20 其他开发

生成器和上下文管理器同时

想象一下,我有一些要运行的代码: ,其中F()为o:而True:a = o.send(2)打印(a) 这意味着 F 类应该返回一个 generator ,并且它也是 context manager ,通常我希望上下文管理器是生成器也是. 我尝试过: F类:def __enter __(self):回归自我def __退出__(自己,* exc):打印('退出')def __next ..
发布时间:2021-05-10 18:45:44 Python

Python:为什么我收到AttributeError:__enter__

我没有重新分配open关键字,但仍然收到此错误.有任何建议或指导来纠正我的错误吗? ,其中tempfile.mkdtemp()为test_dir:打印(test_dir) AttributeError:__enter __ 我也是python的新手,我很难理解这些概念. 解决方案 您使用的mkdtemp错误. mkdtemp 返回的路径名称为str,而不是上下文管理器. ..
发布时间:2021-04-12 19:25:20 Python