在pycharm中,我想在调试期间打破一个什么都不做的断点。我怎么能这样做?
例如,我想打破pass
声明:
for i in range(999999):
if i == 6232:
pass
如果我在pass
上设置断点,则调试器不会中断。到目前为止我能做的最接近的是组成一些未使用的变量名,并为其指定一个无意义的值,所以我可以在该行上设置一个断点:
for i in range(999999):
if i == 6232:
foobar_unused_variable = "At least I can set a breakpoint on this line."
答案 0 :(得分:2)
当即时编译器编译您的示例时,它将编译为pass
为空。换句话说,pass
只是一个关键字,应该用来告诉编译器在其他方面是空块的语法错误。例如,尝试运行不带pass
的代码。不行。您也可以尝试将未使用的表达式(例如0
)或无效语句(例如print(end='')
)替换为pass
。但我建议尽可能删除这些。您也可以在if
声明中设置conditional breakpoint而不是中断。
答案 1 :(得分:2)
对于快速断点或对代码影响最小的东西,您可以在...
(省略号)上插入并断开:
例如:
while some_condition():
do_something()
... # <<< set break point here!
这可能是对我最干净的方式。
Ellipsis是一个特殊的内置python对象,主要用于Slice标记。在这里,我(滥用)使用它来做其他事情。参见:What does the Python Ellipsis object do?
可以在代码中插入一个简单的整数,变量名或其他内容以在特定位置设置断点,但是它看起来可能很奇怪并且会使您的代码混乱,但是...
在视觉上是无害的。比较一下:
break_point = 0
while some_condition():
do_something()
break_point # <<< set break point here!
或者这个:
while some_condition():
do_something()
if False: # <<< set break point here!
pass
测试了其他一些技巧:
del [] # works(with warning: "cannot assign to []")
[] # works(with warning: Statement seems to have no effect)
setbreakpoint = 1 # works(with warning: "local variable value is not used")
Ellipsis # works(with warning: Statement seems to have no effect)
发生在我身上的另一件有趣的事情是,当我在pass
上设置断点时,它可能会中断也可能不会中断,这取决于其在代码中的位置,但是是否中断的确切规则尚不清楚。 >
答案 2 :(得分:1)
正如其他人所说,没有干净的方法可以做到这一点。我建议不要输入pass,而输入诸如
之类的无用语句dbg = True
然后在该行上设置断点。
优势:
缺点:
答案 3 :(得分:0)
breakpoint()
适用于:
但是当我想打开和关闭它时,我使用了一个打印函数,而实际上并没有通过 ()
调用它;像这样:
for i in range(999999):
print # Toggle breakpoint on this line
这比分配一个虚拟变量要好,因为它不会弄乱我的命名空间(这使得调试更容易),而且 PyCharm 不会警告我未使用的变量。
省略号解决方案在我的 PyCharm 上对我不起作用。