2024-06-01 03:37:48 发布
网友
在python交互会话中,有没有方法可以在with语句中输入REPL循环?在
通常,with语句作为单个块执行
>>> >>> with app.app_context(): >>> ... # Normally this is executed as a single block, all at once
我希望能够在一个交互式会话中,在上下文中运行代码。在
您不能完全模拟with语句,但您可能可以通过手动调用app.app_context().__enter__()来接近它。在
with
app.app_context().__enter__()
如果有异常,它不会自动__exit__,但在其他情况下它应该是一样的(完成后您可能需要自己调用__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的循环,但它应该可以工作。在
eval
您不能完全模拟
with
语句,但您可能可以通过手动调用app.app_context().__enter__()
来接近它。在如果有异常,它不会自动
__exit__
,但在其他情况下它应该是一样的(完成后您可能需要自己调用__exit__
,我不确定上下文管理器到底做了什么)。在在Python 2.7中,对于非常简单的输入(即没有变量声明),一个功能完整的REPL:
这将需要一些工作来处理任何更复杂的事情,
eval
是一个碍眼的问题,没有好的方法来打破^C的循环,但它应该可以工作。在相关问题 更多 >
编程相关推荐