当我尝试用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也被变量模糊了)。
到目前为止我尝试过的是:
!!n缓解了这个问题--它运行ipdb版本的next。如果我能够alias n !!n,然后反复使用Enter来执行它,这个问题就会为我解决。但是Enter只显示变量n,而不是运行别名n (应该解析为!!n)。我在用
编辑
发布于 2016-10-24 19:15:42
2016年12月14日更新:
最后,iPython团队决定使用撤销此设计。
解决问题的方法是使用!!语句强制执行标准行为。
> /home/v-zit/test.py(1)<module>()
----> 1 n = 1
2 next = 11
3 print('end')
ipdb> n
> /home/v-zit/test.py(2)<module>()
1 n = 1
----> 2 next = 11
3 print('end')
ipdb> n
1
ipdb> !!n
> /home/v-zit/test.py(3)<module>()
1 n = 1
2 next = 11
----> 3 print('end')
ipdb> next
11
ipdb> !!next
end
--Return--
None
> /home/v-zit/test.py(3)<module>()
1 n = 1
2 next = 11
----> 3 print('end')
ipdb>参考资料:
发布于 2022-09-25 08:12:00
解决方案是使用括号(variable_name)。
例如,如果您有一个可更改的名称为q,您想要检查它,如果您在提示符中直接输入q,那么ipdb调试过程就会中断。
>>> q相反,您应该输入(q)来验证这个可选性:
>>> (q)https://stackoverflow.com/questions/40224066
复制相似问题