17

これにはいくつかのトピックがありますが、満足のいく答えはありません。

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)  

これでうまくいくと思いますが、エラーが発生します。

RuntimeError: スレッドは一度しか開始できません

4

2 に答える 2

5

次のレシピに従って、IPython セッションをプログラムに埋め込むことができます。

try:
    get_ipython
except NameError:
    banner=exit_msg=''
else:
    banner = '*** Nested interpreter ***'
    exit_msg = '*** Back in main IPython ***'

# First import the embed function
from IPython.frontend.terminal.embed import InteractiveShellEmbed
# Now create the IPython shell instance. Put ipshell() anywhere in your code
# where you want it to open.
ipshell = InteractiveShellEmbed(banner1=banner, exit_msg=exit_msg)

次にipshell()、IPython シェルにドロップしたいときにいつでも使用します。これにより、IPython インタープリターをコードに埋め込み (さらにネストすることも)、オブジェクトまたはプログラムの状態を調べることができます。

于 2013-03-27T17:20:42.313 に答える