从iPython内核捕获语法错误

时间:2013-12-03 08:50:19

标签: ipython ipython-notebook ipython-magic

在进程ipython内核中连接,运行,显示,显示错误的方法是

import re, sys, time, os
from StringIO import StringIO
from IPython.kernel.inprocess.blocking import BlockingInProcessKernelClient
from IPython.kernel.inprocess.manager import InProcessKernelManager
from IPython.kernel.inprocess.ipkernel import InProcessKernel
from IPython.core.interactiveshell import InteractiveShell
from IPython.utils.io import capture_output

def decorated_run_code(fn):
    def new_run_code(*args, **kwargs):
        res = fn(*args, **kwargs)
        setattr(args[0], "last_known_outflag", res)
        return res
    return new_run_code
InteractiveShell.run_code = decorated_run_code(InteractiveShell.run_code)    

km = InProcessKernelManager()
km.start_kernel()
kc = BlockingInProcessKernelClient(kernel=km.kernel)
kc.start_channels()
kc.shell_channel.execute('%pylab inline')
kernel = InProcessKernel()    
ip = kernel.shell.get_ipython()

with capture_output() as io:
    ip.run_cell(fail)
print "res", io.stdout
etype, value, tb = kernel.shell._get_exc_info(None)
print kernel.shell.last_known_outflag
if kernel.shell.last_known_outflag: print (etype, "/", value, "/", tb)

我必须装饰run_code以捕获其结果并将其设置为self,因为_get_exc_info返回相同的错误直到另一个错误发生,因此没有其他方法可以查看是否发生错误。如果有人有更好的方法,我想听听它。

1 个答案:

答案 0 :(得分:0)

错误条件在iptyhon 3.0中更容易捕获,请参阅here