Python交互式REPL inside a with statemens

2024-06-01 03:37:48 发布

您现在位置:Python中文网/ 问答频道 /正文

在python交互会话中,有没有方法可以在with语句中输入REPL循环?在

通常,with语句作为单个块执行

>>>
>>> with app.app_context():
>>> ...   # Normally this is executed as a single block, all at once

我希望能够在一个交互式会话中,在上下文中运行代码。在

^{pr2}$

Tags: 方法appisaswithcontext语句all
2条回答

您不能完全模拟with语句,但您可能可以通过手动调用app.app_context().__enter__()来接近它。在

如果有异常,它不会自动__exit__,但在其他情况下它应该是一样的(完成后您可能需要自己调用__exit__,我不确定上下文管理器到底做了什么)。在

在Python 2.7中,对于非常简单的输入(即没有变量声明),一个功能完整的REPL:

from contextlib import contextmanager
import sys 
class app(object):
    @contextmanager
    def app_context(self):
       sys.stdout.write(">>> ")
       yield raw_input()

with app().app_context() as output:
   while True:
       print eval(output)
       output = app().app_context().__enter__()

这将需要一些工作来处理任何更复杂的事情,eval是一个碍眼的问题,没有好的方法来打破^C的循环,但它应该可以工作。在

相关问题 更多 >