http://blog.csdn.net/sun_shengyun/article/details/52756633
https://www.zybuluo.com/hanxiaoyang/note/534296
14、Jupyter Magic –用%pdb调试程序
Jupyter 有自己的调试界面The Python Debugger (pdb),使得进入函数内部检查错误成为可能。
Pdb中可使用的命令见链接
In [ ]: %pdb
def pick_and_take():
picked = numpy.random.randint(0, 1000)
raise NotImplementedError()
pick_and_take()
Automatic pdb calling has been turned ON
---------------------------------------------------------------------------
NotImplementedError Traceback (most recent call last)
<ipython-input-24-0f6b26649b2e> in <module>()
5 raise NotImplementedError()
6
----> 7 pick_and_take()
<ipython-input-24-0f6b26649b2e> in pick_and_take()
3 def pick_and_take():
4 picked = numpy.random.randint(0, 1000)
----> 5 raise NotImplementedError()
6
7 pick_and_take()
NotImplementedError:
> <ipython-input-24-0f6b26649b2e>(5)pick_and_take()
3 def pick_and_take():
4 picked = numpy.random.randint(0, 1000)
----> 5 raise NotImplementedError()
6
7 pick_and_take()
ipdb>
Python Jupyter Notebook 中的错误异常与代码调试 - Datacademy 数析学院 | Datartisan http://datacademy.io/lesson/65
首先我们定义两个函数,以便够造成一些错误和异常,方便来进行对于 Jupyter Notebook 的错误异常相关知识的学习:
def func1(a, b):
return a / b
def func2(x):
a = x
b = x - 1
return func1(a, b)
首先,通过调用函数,我们来引发一个“分母为零”的异常:
func2(1)
在 notebooke 中执行 %xmode Plain
可以设置为当异常发生时只展示简单的异常信息。
%xmode Plain
接着,我们引发相同的错误来对比输出的信息:
func2(1)
可以看到,输出的异常信息不但少了很多,而且内容结构也发生了变化,出错语句的上下文将会被直接隐去,仅是标注出了语句本身与其对应的代码行序号。
如果不喜欢这种简单的输出结果,我们也可以在 notebooke 中执行 %xmode Verbose
来还原显示详细异常信息的模式,
%xmode Verbose
再次执行上文中引发错误的代码,我们可以发现系统再次输出了那段熟悉而复杂的异常信息:
func2(1)
接下来,我们简要说明一下%debug
语句的用法:
在错误异常发生时,我们可以运用%debug
来进行代码调试,例如在上文中“分母为零”的异常发生后,执行%debug
将进入直接出错函数func1的调试模式,我们可以在调试模式自带的对话框中输入变量名来查看函数中的变量情况,输入“quit”则退出该模式。
%debug
同时,在调试模式下,我们也可以通过输入“up”来对外层函数进行调试,查看其中的变量情况。
%debug
另外,在 notebooke 中执行 %pdb on 可以设置为当异常发生时自动进入调试模式,在某些特殊的情况下,这么做可能会更为方便:
%xmode Plain
%pdb on
func2(1)