当我尝试使用ipdb调试此示例脚本时:
n = 1
next = 1
print('end')
我无法执行第3行,因为python变量掩盖了pdb命令:
$ ipdb test.py
> /tmp/test.py(1)<module>()
----> 1 n = 1
2 next = 1
3 print('end')
ipdb> next
> /tmp/test.py(2)<module>()
1 n = 1
----> 2 next = 1
3 print('end')
ipdb> next
> /tmp/test.py(3)<module>()
1 n = 1
2 next = 1
----> 3 print('end')
ipdb> next
1
ipdb> n
1
ipdb> !n
1
ipdb> !next
1
当两个命令(n/next)都无法识别时,我如何继续执行代码呢?(假设s/step也被变量遮蔽了)。
目前为止我尝试的是:
- 使用ipdb 3而不是ipdb -同样的问题(在我的例子中可能是因为ipdb链接到ipdb 3:))
***using pdb -它工作了!**n/next命令移到下一行,而不是显示python变量。我的ipdb有什么问题? !!n
缓解了这个问题-它运行next
的ipdb版本。如果我可以alias n !!n
,然后重复使用Enter
来执行它,这个问题就可以为我解决了。但是Enter
只显示变量n
,而不运行别名n
(它应该解析为!!n
)
我在用
- Linux操作系统16.10
- Python 3.5.2的基本功能:Anaconda 4.2.0(64位)
- 数据库(0.10.1)
- 进程(5.1.0)
- 紫丁香属植物(0.1.0)
- 我没有~/.pdbrc文件
编辑
此问题已由以下人员修复:https://github.com/ipython/ipython/pull/10050
2条答案
按热度按时间0x6upsns1#
2016年12月14日更新:
最后,iPython团队决定revoke this design。
问题的解决方案是使用
!!
语句强制执行标准行为。参考编号:
https://github.com/ipython/ipython/pull/9449
https://github.com/ipython/ipython/pull/10050
nlejzf6q2#
解决方法是使用括号
(variable_name)
。例如,如果您有一个名为
q
的变量,您想将其 checkout ,如果您直接在提示符中输入q
,则ipdb调试过程将中断。相反,您应该输入
(q)
来检查此变量: