问题
pdb
库似乎是尝试pdb
来测试源代码的最简单方法是什么? pdb
换句话说,我应该使用pdb
的哪个功能?以及如何有效地使用它来进行实验来源?
玩具示例
kur dump mnist.yml
__main__.py
和kurfile.py
。 dump()
中的parse_kurfile()
和__main__.py
以及Kurfile.__init__()
kurfile.py
他们的关系如下:
console:kur dump mnist.yml
- >
python:__main__.py
:main()
- > dump()
- > parse_kurfile()
- >
python:kurfile.py
:Kurfile
class - > __init__()
...
python:...其余的不被探索
我应该使用pdb
的哪个功能来探索从dump()
到parse_kurfile()
再到Kurfile.__init__()
再回到dump()
的执行流程?
更新
如何使用pdb
有效地探索Jupyter笔记本?
pdb
甚至不记得控制台的历史,不是很好答案 0 :(得分:0)
一种可能的解决方案
pdb.set_trace
set_trace
跟踪当前代码块级别的详细信息,它不会更深入到下一个内部函数。 例如,当我在pdb.set_trace
内放置一个dump()
时,pdb
将无法帮助我追踪parse_kurfile()
的功能,但请留在当前dump()
阻止:
def dump(args): """将Kurfile转储为stdout作为JSON blob。 """ pdb.set_trace() ###将kurfile.yml解析成要在python代码中使用的部分 spec = parse_kurfile(args.kurfile,args.engine)
如果我想深入parse_kurfile
中的__main__.py
和Kurfile.__init__
中的kurfile.py
,那么我只需要将pdb.set_trace
加入inspect
这两个函数中的每一个,如下所示:
<强>更新强>
根据我的经验,目前有两个图书馆pprint
和pdb
适合inspect
图书馆。
在库inspect.getdoc
内,我最常使用以下函数:
inspect.getmodule
:查看函数文档inspect.getfullargspec
:找出此功能或对象的来源inpsect.getsourceliens
:找出func所需的所有输入pdb
:获取函数的源代码通过以上这些功能,当我想查看其他功能时,我不必去编辑器中查找源代码,我可以在pprint
中找到它们。< / p>
从库pprint.pprint
,您可以猜测,我使用pdb
打印出源代码,文档在atom
内以更易读的格式打印。
更新
探索和实验来源的工作站:
iterm2
拆分窗口并同时查看不同的源文件; ipython
拆分窗口并使用inspect.getmembers(module or class name)
执行python或bash代码更新
在探索期间,我希望手头有模块或类的所有属性和方法。
为实现这一目标,我可以使用iterm2
并使用preferences
拆分窗口进行查看:
更新:如何改变眼睛的iterm2颜色?
转到iterm2 color
,Tango Dark
,更改为foreground color
,灰色## logcolor.py
# Color codes for each log-level.
COLORS = {
'DEBUG': BLUE,
'INFO': MAGENTA,
'WARNING': RED,
'ERROR': RED,
'CRITICAL': GREEN
}
以使白色文字看起来柔和
将Kur记录器颜色设置更改为:
# Create arrays
arrays=[
np.array([1,2,3]),
np.array([4,5,6]),
np.array([7,8,9])
]
# Create an array to return to
sample = np.array([])
for array in arrays:
sample = np.concatenate([sample, array])
# Print results
print('sample', sample)
print('length', len(sample))
答案 1 :(得分:0)
pdb
?避免Jupyter中pdb
的缺点的一种方法:
import pdb
和pdb.set_trace()
插入到python代码python your.py