Jupyter中的调试和运行模式

时间:2017-11-16 12:20:10

标签: python ipython jupyter-notebook pdb ipdb

就像在matlab中一样,Jupyter是否有可能在调试模式下运行一个函数,其中执行在断点处暂停,在运行模式下该函数忽略了断点? 在一个简单的例子中,如

from IPython.core.debugger import set_trace

def debug(y):
    x = 10
    x = x + y 
    set_trace()
    for i in range(10):
        x = x+i
    return x

debug(10)

我们可以调用函数使得set_trace被忽略并且函数正常运行吗?

我想要这个的原因是在我的函数中我放置了很多设置跟踪,当我只想在没有跟踪的情况下运行时,我需要注释所有设置的跟踪。有更简单的方法吗?

1 个答案:

答案 0 :(得分:3)

我不知道你可以直接用Jupyter做到这一点的方法,但你可以做的就是像这样的猴子补丁set_trace()(我建议把它放在自己的单元格中,这样你就可以当你想重新打开调试时重新运行它:)

from IPython.core.debugger import set_trace
debug_mode = False #switch this to True if you want debugging back on
if not debug_mode:
  def pass_func():
    pass
  set_trace = pass_func

这样做会将名称set_trace重新绑定为一个什么都不做的函数,因此每次调用set_trace()时,它都只会pass

如果您想重新打开调试,只需将debug_mode标志切换到True并重新运行该单元格。然后,这会将名称set_trace重新绑定为从set_trace导入的IPython.core.debugger