问题标签 [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.

0 投票
1 回答
2203 浏览

python - 有没有一种有意义的方式在生成器中使用上下文管理器?

输出:

有没有办法让 python在-loop 被中断__exit__时自动调用 context() 的方法?for或者其他实现相同目标的方法?我对生成器和上下文管理器的了解让我怀疑这是不可能的,但这使得上下文管理器在生成器内部相当无用,不是吗?在我看来,块yield内的语句with应该引发红旗,上下文管理器__exit__可能无法运行

0 投票
2 回答
2819 浏览

python - 是否可以制作一个上下文敏感的 python 上下文管理器来保存、修改和恢复状态?

我有一对 python 函数,它们当前在两个值之间翻转一个全局变量。我想把它们变成上下文管理器,这样我就可以将它们用作with块,在块内设置变量,但在之后恢复它。这是所需的行为:

这样的嵌合体可能吗?

更新:为了清楚起见,这里是仅上下文管理器的实现:

使用关键字调用这些 w/oa 会返回一个生成器。有没有办法通过普通函数调用和巧克力上下文管理器来获得模式翻转行为?

0 投票
3 回答
244 浏览

python - 使用循环引用处理对象

我的设计如下:

  • __main__参考a
  • a参考b
  • b参考a
  • a被创建然后从__main__

因此ab具有循环引用。但是,del a我宁愿两者兼而有之a,然后将其b处理掉。

我在很多地方看到使用上下文管理器的建议,特别是with语句而不是__del__(). 但是,我在本地范围内看到的所有with开始和结束示例(例如,某种方法)

这可以优雅地执行with吗?
什么是替代方案?

0 投票
4 回答
1200 浏览

python - 为 zipfile 定义的 __enter__ 和 __exit__ 在哪里?

基于with 语句

  • __exit__()加载上下文管理器以供以后使用。
  • 上下文管理器的__enter__()方法被调用。

我已经看到了其中一种与zipfile的用法

问题> 我检查了位于此处的 zipfile 的源代码:

/usr/lib/python2.6/zipfile.py

不知道__enter__and__exit__函数在哪里定义?

谢谢

0 投票
2 回答
1095 浏览

python - 串行端口上下文管理器

以下是合理的方法吗?

在哪里SerialPortsSerialPort实现上下文管理器接口。

SerialPorts.exit()循环通过添加的串行端口调用它们的exit(). SerialPort'exit()关闭串行端口。

有没有更好的方法来做到这一点?

0 投票
2 回答
17905 浏览

python - Python 的 MySQLdb 的上下文管理器

我习惯(被宠坏了?)python 的SQLite接口来处理 SQL 数据库。python 的SQLite API 中的一个很好的特性是“上下文管理器”,即python 的with语句。我通常通过以下方式执行查询:

使用上面的代码,如果我的查询修改了数据库并且我忘记运行conn.commit(),上下文管理器会在退出with语句时自动为我运行它。它还可以很好地处理异常:如果在我提交任何内容之前发生异常,则数据库将回滚。

我现在正在使用该MySQLdb接口,它似乎不支持开箱即用的类似上下文管理器。我如何创建自己的?这里有一个相关的问题,但它没有提供完整的解决方案。

0 投票
3 回答
642 浏览

python - 上下文管理器适合这份工作吗?

下面粘贴的代码执行以下操作:

  • 创建一个导入钩子
  • 创建一个上下文管理器,它meta_path在退出时设置和清理。
  • 转储由imports.log中输入的程序完成的所有导入

现在我想知道在这种情况下使用上下文管理器是否是一个好主意,因为实际上我没有标准try/finally流程,而只是一个设置和清理。

另一件事——用这条线:

cc变成None?它不应该是一个CollectorContext对象吗?

0 投票
5 回答
14111 浏览

python - 在 python 中,是否有在设置/拆卸中使用上下文管理器的好习惯

我发现我在 Python 中使用了大量的上下文管理器。但是,我一直在使用它们测试一些东西,我经常需要以下内容:

当这进行许多测试时,这显然会变得无聊,因此本着 SPOT/DRY(单点真理/不要重复自己)的精神,我想将这些部分重构到测试setUp()tearDown()方法中。

然而,试图这样做导致了这种丑陋:

必须有更好的方法来做到这一点。理想情况下,在每个测试方法的setUp()/中tearDown()没有重复位(我可以看到在每个方法上重复装饰器是如何做到的)。

编辑:考虑undertest对象是内部的,GetResource对象是第三方的东西(我们没有改变)。

我在这里重命名GetSlotGetResource——这比特定情况更普遍——上下文管理器是对象进入锁定状态和退出的方式。

0 投票
1 回答
5019 浏览

python - 使用上下文管理器将脚本输出重定向到文件?

我正在编写一个脚本,我有一个选项,可以在命令行上传递,脚本是否应该将其结果打印到标准输出或预定义的结果文件。代码大纲如下所示。我现在已经阅读了一些关于 Python 中的上下文管理器的内容,但我不确定在这种特定情况下是否以及如何使用上下文管理器。所以我正在寻求建议

  1. 在这个问题中使用上下文管理器是否有意义
  2. 如何着手实施它。

因此,没有上下文管理器的代码是:

0 投票
2 回答
4128 浏览

python - 嵌套 Python 上下文管理器

这个问题中,我定义了一个包含上下文管理器的上下文管理器。完成这种嵌套的最简单正确的方法是什么?最后我打电话self.temporary_file.__enter__()过去了self.__enter__()。但是,在 中self.__exit__,我很确定我必须调用self.temporary_file.__exit__(type_, value, traceback)finally 块以防引发异常。如果出现问题,我应该设置 type_、value 和 traceback 参数self.__exit__吗?我检查了contextlib,但找不到任何实用程序来帮助解决这个问题。

问题的原始代码: