首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何协调上下文管理器与基于单元格的朱庇特笔记本执行风格?

如何协调上下文管理器与基于单元格的朱庇特笔记本执行风格?
EN

Stack Overflow用户
提问于 2020-01-30 20:58:06
回答 1查看 753关注 0票数 5

像朱庇特这样的笔记本电脑将交互执行分解成细胞。一般来说,这对我来说很好,但有一个明显的例外:上下文管理器。如果打开with语句,单元格的结尾将关闭上下文,上下文管理器退出。

假设我的笔记本处理从DBMS获得的数据。我通常使用上下文管理器来管理到数据库的连接,并管理游标来自动提交或回滚事务。但是,在建立连接之后,我的整个代码需要位于一个单元格中。

所做的工作是不使用上下文管理器,这可能是上下文管理器帮助我们防止的。这个问题在笔记本中被放大,当单元格可以(实际上)以任何顺序执行时。在我的DBMS示例中,可以打开到DB的多个连接,而不需要关闭,因为单元格建立了多次执行连接。此外,它们甚至可能不是上下文管理器的“内联”版本,例如,当上下文管理器是一个@contextlib.contextmanager修饰函数时,尽管我没有在我使用的任何主要库中看到这种情况。

我可能只是在咆哮,但有没有办法使上下文管理器单元执行变得友好呢?还是我们只能使用短命的上下文管理器,而不是自己使用呢?

EN

回答 1

Stack Overflow用户

发布于 2020-06-16 19:37:56

如何在单元格中运行上下文管理器类的__enter__方法?

代码语言:javascript
复制
from contextlib import ContextDecorator

class MyContext(ContextDecorator):

   def __init__(self, x):
      self.x = x

   def __enter__(self):
      return self

你可以在任何牢房里:

代码语言:javascript
复制
something = MyContext(10).__enter__()

这将使下一个单元格的上下文“打开”。

对于基于生成器的上下文管理器,您可以使用相同的直觉。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59994412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档