问题标签 [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 投票
3 回答
2237 浏览

python - 在“with”中嵌套 Python 上下文管理器的迭代器

我有一个返回上下文管理器的迭代器。

我想要一个 pythonicwith语句,它模拟几个嵌套with语句的行为,一个用于迭代器返回的每个上下文管理器。

有人可能会说,我想要(已弃用)contextlib.nested功能的概括。

0 投票
5 回答
25398 浏览

python - 在 Python 中充当装饰器和上下文管理器的函数?

这可能把事情推得太远了,但主要是出于好奇..

是否有可能同时充当上下文管理器和装饰器的可调用对象(函数/类):

0 投票
3 回答
642 浏览

python - 在上下文管理器中部分应用函数(“with ..”)

基本上,我有一个 api,它为类 Foo() 提供了一些方法 Foo.bar(arg1, name)。

有没有办法在上下文管理器中将 functools.partial 对象应用于 Foo.bar ,即像这样:

我想知道除了猴子修补 Foo.bar 是否有更优雅的方法?

编辑: 关键是,我有这样的代码:

如果没有额外的样板,下面的代码应该对“模型”产生相同的调用:

0 投票
2 回答
5007 浏览

python - Python 为什么不为 sqlite3 游标编写上下文管理器?

这应该可以工作,但只是说没有股票表 - 应该在上下文管理器中的某个地方丢失了连接?

0 投票
1 回答
929 浏览

python - 可以在 Python 中用上下文管理器全局替换函数吗?

我想在 python 中编写一个上下文管理器,临时禁用全局功能。这样的事情可以通用吗?以下是所需行为的示例:

我知道,原则上,我可以暂时分配给lambda *args, **kwargs: Nonex.disable_me但我不清楚上下文管理器是否有足够的信息来实际执行此操作。

0 投票
3 回答
2031 浏览

python - Python 上下文管理器:有条件地执行主体?

我正在编写一个基于 MPI 的应用程序(但 MPI 在我的问题中并不重要,我提到它只是为了揭示基本原理)并且在某些情况下,当工作项少于进程时,我需要创建一个新的通信器不包括无关的进程。最后,新的通信器必须由有工作要做的进程(并且只能由它们)释放。

一个巧妙的方法是编写:

主体仅由有工作要做的进程执行。

上下文管理器中有没有办法避免执行正文?我理解上下文管理器的设计是为了避免隐藏控制流,但我想知道是否有可能规避这一点,因为在我的情况下,我认为为了清楚起见这是合理的。

0 投票
4 回答
8646 浏览

python - 在 Python 中编写一个上下文管理器,它本身使用 with 语句

我正在尝试编写一个使用其他上下文管理器的上下文管理器,因此客户不需要知道整个配方,只需要知道我正在呈现的界面。我不能这样做@contextmanager——如果你被异常打断,调用后的代码yield不会被执行,所以我需要使用基于类的管理器。

这是一个小示例脚本:

输出如下:

我希望它输出这个:

有没有办法告诉基于类的上下文管理器将自己与其他上下文管理器一起包装?

0 投票
4 回答
565 浏览

python - 用装饰器替换宏样式的类方法?

尽管阅读了许多关于该主题的文章(包括 [this][1] 非常流行的关于 SO 的文章),但我很难很好地掌握装饰器。我怀疑我一定是愚蠢的,但是由于愚蠢带来的所有固执,我决定尝试解决这个问题。

那,我怀疑我有一个很好的用例......

下面是我的一个项目中的一些代码,它从 PDF 文件中提取文本。处理涉及三个步骤:

  1. 设置处理 PDF 文件所需的 PDFMiner 对象(样板初始化)。
  2. 对 PDF 文件应用处理功能。
  3. 不管发生什么,关闭文件。

我最近了解了上下文管理器和with语句,这对他们来说似乎是一个很好的用例。因此,我从定义PDFMinerWrapper类开始:

现在我可以轻松地处理 PDF 文件,并确保它能够优雅地处理错误。理论上,我需要做的就是这样的:

这很好,除了我需要在将函数应用于返回的对象之前检查 PDF 文档是否可提取PDFMinerWrapper。我目前的解决方案涉及一个中间步骤。

我正在使用我调用的一个类,该类Pamplemousse用作处理 PDF 的接口。反过来,PDFMinerWrapper每次必须对对象已链接到的文件执行操作时,它都会使用它。

下面是一些(删节的)代码,演示了它的使用:

每当我希望对 PDF 文件执行操作时,我都会将相关函数with_pdf及其参数传递给该方法。with_pdf反过来,该方法使用该with语句来利用上下文管理器PDFMinerWrapper(从而确保优雅地处理异常)并在实际应用已传递的函数之前执行检查。

我的问题如下:

我想简化这段代码,这样我就不必显式调用Pamplemousse.with_pdf. 我的理解是装饰器在这里可能会有所帮助,所以:

  1. 我将如何实现一个装饰器,其工作是调用with语句并执行可提取性检查?
  2. 装饰器是否可以是类方法,或者我的装饰器必须是自由形式的函数或类?
0 投票
1 回答
6077 浏览

python - Python: Unexpected behavior using contextmanager on class method

I'm trying to use the with..as contruct in Python to make writing "reversible computing" code easier. However, using @contextmanager on a class method seems to change the default initialization of future class instances. Python 2.6 and 3.1 have the same behavior. Here is a simple example exhibiting this behavior:


  • Why isn't SL2 a fresh instance of SymList?
  • How is the SL2.L data member referring to the SL.L data member?
0 投票
3 回答
30708 浏览

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

我有一些带有遗留函数的遗留代码,该函数将文件名作为参数并处理文件内容。代码的工作传真如下。

我想要做的不是必须将我生成的一些内容写入磁盘才能使用这个遗留功能,所以我虽然可以StringIO用来创建一个对象来代替物理文件名。但是,这不起作用,如下所示。

我认为StringIO这是解决这个问题的方法。谁能告诉我是否有办法使用这个遗留函数并在参数中传递一些不是磁盘上的文件但可以被遗留函数处理的东西?遗留函数确实让with上下文管理器对filename参数值进行处理。

我在谷歌遇到的一件事是:http ://bugs.python.org/issue1286 ,但这对我没有帮助......

代码

输出

这是输出FileOnDisk.txt

这是错误: