gpt4 book ai didi

python-2.7 - 如何将 IPython 解释器嵌入在 IPython Qt 控制台中运行的应用程序中

转载 作者:行者123 更新时间:2023-12-04 00:00:23 25 4
gpt4 key购买 nike

关于这个有几个主题,但没有一个有令人满意的答案。

我有一个在 IPython qt 控制台中运行的 python 应用程序

http://ipython.org/ipython-doc/dev/interactive/qtconsole.html

当我遇到错误时,我希望能够与当时的代码进行交互。

    try: 
raise Exception()
except Exception as e:
try: # use exception trick to pick up the current frame
raise None
except:
frame = sys.exc_info()[2].tb_frame.f_back
namespace = frame.f_globals.copy()
namespace.update(frame.f_locals)
import IPython
IPython.embed_kernel(local_ns=namespace)

我认为这会起作用,但我收到一个错误:

运行时错误:线程只能启动一次

最佳答案

我只是用这个:

from IPython import embed; embed()

对我来说比其他任何东西都好:)

更新:

为了庆祝这个答案获得 50 票赞成,以下是我在此片段发布后的六年中对其进行的更新。

首先,我现在喜欢在单个语句中导入和执行,因为我使用 black对于这些天我所有的 python 代码,它以一种在这种特定和不寻常的上下文中没有意义的方式重新格式化原始代码段。所以:
 __import__("IPython").embed()

鉴于我经常在循环或线程中使用它,包含一个允许终止父进程的片段会很有帮助(部分是为了方便,部分是为了提醒自己最好的方法)。 os._exit是这里的最佳选择,所以我的代码片段包括这个(使用单个语句的相同逻辑 w/r/t):
q = __import__("functools").partial(__import__("os")._exit, 0)

然后我可以简单地使用 q()如果/何时我想退出主进程。

我的完整片段(带有 # FIXME 以防我可能忘记删除它!)看起来像这样:
q = __import__("functools").partial(__import__("os")._exit, 0)  # FIXME
__import__("IPython").embed() # FIXME

关于python-2.7 - 如何将 IPython 解释器嵌入在 IPython Qt 控制台中运行的应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15167200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com