contextmanager相关内容
我已经搜索过了,但我找不出任何好的理由来使用python的__enter__/__exit__而不是__init__(或__new__?)/__del__。 我知道__enter__/__exit__旨在与with语句一起用作上下文管理器,with语句非常好。但与此对应的是,这些块中的任何代码都只在该上下文中执行。通过使用这些而不是__init__/__del__,我似乎是在与调用者创建一个他们
..
使用 pool.map(funct, iterable) 时出现此错误: AttributeError: __exit__ 没有解释,只是堆栈跟踪到模块内的 pool.py 文件. 这样使用: 使用 Pool(processes=2) 作为池:pool.map(myFunction, mylist)pool.map(myfunction2, mylist2) 我怀疑picklabil
..
为了以编程方式组合上下文管理器,我使用以下代码: == helpers.py == 从 contextlib 导入嵌套进口模拟def multiple_patch(obj_to_be_patch,*方法):返回嵌套(*[mock.patch.object(obj_to_be_patch, method) 用于方法中的方法]) == 测试.py == def test_foo(self)
..
当它们都使用上下文管理器时,我无法弄清楚如何模拟一个类中打开的两个文件.我知道如何使用这样的模拟模块为一个上下文管理的文件执行此操作: @patch('__builtin__.open')def test_interface_mapping(self, mock_config):m = MagicMock(规格=文件)句柄 = m.return_value.__enter__.return_va
..
我在某人的代码中看到了这一点.什么意思? def __enter__(self):回归自我def __exit__(self, type, value, tb):self.stream.close() from __future__ import with_statement#for python2.5a类(对象):def __enter__(self):打印 'ss'返回'sss111'd
..
我发现我在 Python 中使用了大量上下文管理器.但是,我已经使用它们测试了许多东西,我经常需要以下内容: class MyTestCase(unittest.TestCase):def testFirstThing(self):以 GetResource() 作为资源:u = UnderTest(资源)u.doStuff()self.assertEqual(u.getSomething(),
..
我想要一个 pyplot 图形的上下文管理器,本质上是这样的: from contextlib import contextmanager导入 matplotlib.pyplot 作为 plt@contextmanager定义子图():(fig, ax) = plt.subplots()尝试:产量(无花果,斧头)最后:plt.close(图) 可以为返回的元组实现类型提示吗?天真 导入输入d
..
这是来自 Richard Jones 的博客的一些代码: with gui.vertical:text = gui.label('你好!')items = gui.selection(['one', 'two', 'three'])使用 gui.button('点击我!'):定义 on_click():text.value = items.valuetext.foreground = 红色 我
..
使用 Python 的 contextmanager 我想生成一个包装器显示某个代码块的类似 Linux 的进度: 做某事...完成.[42 毫秒] 这是有效的 - 有点: from contextlib import contextmanager导入时间@contextmanager定义味精(米):打印(米+“...",结束='')t_start = time.time()屈服t_
..
我知道从上下文管理器的 __exit__() 方法中重新引发异常是一种糟糕的风格.因此,我想在实例上添加一个属性,该属性可以携带上下文信息,如果我让异常涓涓细流或捕获它,则该属性将不可用.这将避免重新加注. 在异常上添加属性的替代方法是吞下异常,在兼作相关上下文管理器的实例上设置一些状态,然后检查该状态.问题是这会导致捕获 22,不是吗?由于异常意味着正在退出 with 块内的执行.除了再次
..
我有一些带有遗留函数的遗留代码,它将文件名作为参数并处理文件内容.代码的工作传真如下. 我想要做的是不必将我生成的一些内容写入磁盘以使用此遗留函数,所以我虽然我可以使用 StringIO 来创建一个对象来代替物理文件名.但是,这不起作用,如下所示. 我认为 StringIO 是解决这个问题的方法.谁能告诉我是否有办法使用这个遗留函数并在参数中传递一些不是磁盘上的文件但可以被遗留函数视为
..
在 __enter__ 和 __exit__ 用例的 python 文件对象实现之外,有人有真实世界的例子吗?最好是你自己的,因为我想要实现的是一种更好的方式来概念化将使用它的情况. 我已经阅读了这个. 而且,这里是 Python 文档的链接. 解决方案 有许多用途.就在我们的标准库中: sqlite3;使用 连接作为上下文管理器 表示提交或中止事务. unittest
..
在我的代码中,我需要能够正确打开和关闭设备,因此需要使用上下文管理器.虽然上下文管理器通常被定义为具有 __enter__ 和 __exit__ 方法的类,但似乎也有可能装饰一个与上下文管理器一起使用的函数(参见 最近的一篇文章 和这里还有一个很好的例子a>). 在以下(工作)代码片段中,我实现了两种可能性;一个只需要将注释行与另一个交换: 导入时间导入上下文库定义设备():返回 42@c
..
这样做似乎很自然: with socket(socket.AF_INET, socket.SOCK_DGRAM) as s: 但是 Python 没有为套接字实现上下文管理器.我可以轻松地将它用作上下文管理器吗?如果可以,如何使用? 解决方案 socket 模块相当低级,让您几乎可以直接访问 C 库功能. 您始终可以使用 contextlib.contextmanager装饰器
..
我对此很陌生,只是想了解 with 语句.我知道它应该替换 try/except 块. 现在假设我做这样的事情: 尝试:name='rubicon'/2 # 引发异常除了作为 e 的例外:打印“不不可能"最后:打印“好的,我抓住了你" 如何用上下文管理器替换它? 解决方案 with 并没有真正取代 try/except,但是,相反,try/finally.尽管如此,您可以让上下文
..
假设您通过上下文管理器获取了三个对象,例如一个锁、一个数据库连接和一个 ip 套接字.您可以通过以下方式获取它们: 带锁:使用 db_con:带插座:#做东西 但是有没有办法在一个街区内做到这一点?类似的东西 带锁,db_con,socket:#做东西 此外,是否有可能,给定具有上下文管理器的未知长度的对象数组,是否有可能以某种方式执行: a=[lock1, lock2, lock3,
..
密切相关: 在 python 中,是否有在设置/拆卸中使用上下文管理器的好习惯 我有一个上下文管理器,用于在测试中修复时间/时区.我想把它放在一个 pytest funcarg (或夹具,我们使用 pytest 2.2.3 但我可以向后翻译).我可以这样做: def pytest_funcarg__fixedTimezone(request):# 修复时区以匹配 Qld,无需担心 DST
..
如何在 PyCharm 中注释 contextmanager 的产量类型,以便它正确猜测 with 子句中使用的值的类型 - 就像它猜测的那样在 with open(...) as f 中创建的 f 是一个文件吗? 例如,我有一个这样的上下文管理器: @contextlib.contextmanagerdef temp_borders_file(geometry: GEOSGeometry
..
想象一下,我有一些要运行的代码: ,其中F()为o:而True:a = o.send(2)打印(a) 这意味着 F 类应该返回一个 generator ,并且它也是 context manager ,通常我希望上下文管理器是生成器也是. 我尝试过: F类:def __enter __(self):回归自我def __退出__(自己,* exc):打印('退出')def __next
..
我没有重新分配open关键字,但仍然收到此错误.有任何建议或指导来纠正我的错误吗? ,其中tempfile.mkdtemp()为test_dir:打印(test_dir) AttributeError:__enter __ 我也是python的新手,我很难理解这些概念. 解决方案 您使用的mkdtemp错误. mkdtemp 返回的路径名称为str,而不是上下文管理器.
..