问题标签 [contextmanager]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 为什么我的 contextmanager-function 不像我在 python 中的 contextmanager 类那样工作?
在我的代码中,我需要能够正确打开和关闭设备,因此需要使用上下文管理器。虽然上下文管理器通常被定义为具有__enter__
和__exit__
方法的类,但似乎也有可能装饰一个函数以与上下文管理器一起使用(参见最近的一篇文章和另一个很好的例子)。
在以下(工作)代码片段中,我实现了两种可能性;只需要将注释行与另一行交换:
我尝试的是运行代码并使用CTRL-C
. 当我Wrap
在上下文管理器中使用该类时,该__exit__
方法按预期调用(在终端中打印文本“关闭”),但是当我使用该wrap
函数尝试相同的操作时,文本“关闭”不会打印到终端。
我的问题:代码片段是否有问题,我是否遗漏了什么,或者为什么print("close")
没有使用装饰函数调用该行?
python - py.test - 如何在 funcarg/fixture 中使用上下文管理器
密切相关: 在 python 中,是否有在 setup/teardown 中使用上下文管理器的好习惯
我有一个上下文管理器,用于在测试中修复时间/时区。我想将它放在 pytest funcarg 中(或夹具,我们使用的是pytest
2.2.3,但我可以向后翻译)。我可以这样做:
...但它有点恶心。在相关的 Q jsbueno中指出:问题是您的代码没有规定在__exit__
发生异常时正确调用对象的方法。
他的回答使用了元类方法。但这对于 pytest 来说并不是那么有用,因为 pytest 通常测试只是函数,而不是类。那么解决这个问题的 pytest-y 方法是什么?涉及运行测试钩子的东西?
python - 使用可变数量的上下文管理器替代 contextlib.nested
我们的代码根据运行时参数调用可变数量的上下文管理器:
但是,contextlib.nested
自 Python 2.7 起已弃用:
Python 'with' 语句中 Multiple variables的答案表明它contextlib.nested
有一些“令人困惑的容易出错的怪癖”,但建议的使用 multiple-managerwith
语句的替代方法不适用于可变数量的上下文管理器(并且还会破坏向后兼容性)。
是否有任何替代方案contextlib.nested
不被弃用并且(最好)没有相同的错误?
还是我应该继续使用contextlib.nested
并忽略警告?如果是这样,我是否应该计划contextlib.nested
在将来的某个时间被删除?
python - 仅使用 for 循环遍历文件是否是一种好的形式?
我遇到了一些遍历文件中行的代码,如下所示:
这是一个更 Pythonic 的版本,例如:
它使用更少的缩进级别,所以看起来更好,但它是一样的吗?据我所知,with
基本上添加了一个finally: f.close()
或一些东西来确保在离开块后清理对象。当第一个for
循环结束(或者被 a 缩短break
)并且变量超出范围时,是否会发生同样的事情?我可以从第一段代码中得到提示并为自己节省一些击键,或者更确切地说,我应该修复它吗?
python - 如何嵌套任意数量的 Python 文件上下文管理器?
我想采用任意数量的路径来表示嵌套的 tar 档案,并对最里面的档案执行操作。麻烦的是,嵌套可以是任意的,所以我需要的上下文管理器的数量也是任意的。
举个例子:
我不能使用该with
语句的嵌套语法,因为可以嵌套任意数量的级别。我不能使用contextlib.nested
,因为文档在那里说:
...使用
nested()
打开两个文件是一个编程错误,因为如果在打开第二个文件时抛出异常,第一个文件将不会立即关闭。
有没有办法使用语言结构来做到这一点,还是我需要手动管理我自己的打开文件对象堆栈?
python - Python中的多行带子句
如何将with
Python 中的长子句分散到多行?现在,我有
我想遵循谷歌的 Python 风格指南,它禁止反斜杠继续。
python - With-Statement and Threading : 使函数在运行前执行
这个问题是以下问题的后续:With statement and python threading
我一直在尝试使用 python 线程 api。我有这段代码适用于我想要实现的目标:---->在调用 python 线程上运行之前执行函数。
但是要做到这一点,我总是要在run()方法中调用time.sleep(1),使其继续执行execute()。否则线程退出而没有函数分配和执行。有没有更好的方法来实现这种类型等待?
python - 发送到使用 contextlib.contextmanager 定义的上下文管理器
假设我有一个上下文管理器:
如何发送z
到上下文管理器?
我试过:
但我得到了 StopIteration,这可能是因为send
产量?
python - 如何在 Python 中使用套接字作为上下文管理器?
似乎做这样的事情是很自然的:
但是 Python 没有为套接字实现上下文管理器。我可以轻松地将它用作上下文管理器吗?如果可以,如何使用?
python - 如何在 python 中使用上下文管理器
下面是一段假设的代码
在这种情况下,我希望当使用块 db.close()退出时,会调用 db 并将 db 标记为垃圾收集。
在工作中,我开始看到这段代码突然出现。
我不知道你是否应该像java中的new关键字一样使用with 。有人可以指导我找到任何可以解释使用 with 时可以/不应该/不应该做什么的好文档吗?
PS 日志消息实际上是那么蹩脚:-)