当我尝试使用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 /步也被变量模糊了。)
!!n
缓解了问题 - 它运行next
的ipdb版本。如果我只能alias n !!n
然后重复使用Enter
来执行它,问题就会解决。但是Enter
只显示变量n
而不是运行别名n
(应解析为!!n
)答案 0 :(得分:2)
2016年12月14日更新:
最后,iPython团队决定revoke this design。
您的问题的解决方案是使用!!
语句强制标准行为。
> /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>
参考: