Edw*_*vey 5 python debugging pycharm
在pycharm中,我想在调试期间中断不执行任何操作的断点。我怎样才能做到这一点?
例如,我想谈一谈以下内容pass:
for i in range(999999):
if i == 6232:
pass
Run Code Online (Sandbox Code Playgroud)
如果我在上设置了一个断点pass,则调试器不会在那里中断。到目前为止,我能做的最接近的事情是组成一些未使用的变量名,并为其分配一个无意义的值,因此我可以在该行上设置一个断点:
for i in range(999999):
if i == 6232:
foobar_unused_variable = "At least I can set a breakpoint on this line."
Run Code Online (Sandbox Code Playgroud)
当即时编译器编译您的示例时,它会编译为空pass。换句话说,pass只是一个关键字,应该用来告诉编译器在否则将是空块的内容中没有语法错误。例如,尝试在没有pass. 不会工作。您还可以尝试使用未使用的表达式(例如0)或无效果语句(例如print(end=''))代替pass。但我建议尽可能删除这些。您还可以设置条件断点而不是在if语句内中断。
更新:从 Python 3.7+ 开始,现在可以使用内置breakpoint()函数。
对于快速断点或对您的代码产生最小视觉影响的东西,您可以在...(省略号)上插入和中断:
例如:
while some_condition():
do_something()
... # <<< set break point here!
Run Code Online (Sandbox Code Playgroud)
这可能是对我最干净的方式。
Ellipsis 是一个特殊的内置 Python 对象,主要用于 Slice 表示法。在这里,我(ab)用它来做其他事情。请参阅:Python Ellipsis 对象有什么作用?
可以在代码中插入一个裸整数、变量名或其他东西来在某个地方设置断点,但它可能看起来很奇怪并且会使你的代码混乱,但...在视觉上是无害的。与此比较:
break_point = 0
while some_condition():
do_something()
break_point # <<< set break point here!
Run Code Online (Sandbox Code Playgroud)
或这个:
while some_condition():
do_something()
if False: # <<< set break point here!
pass
Run Code Online (Sandbox Code Playgroud)
其他一些技巧测试:
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)
Run Code Online (Sandbox Code Playgroud)
发生在我身上的另一件有趣的事情是,当我在pass它上面设置断点时,它可能会中断,也可能不会中断,这取决于它在代码中的位置,但是中断与否的确切规则不知何故不清楚。
| 归档时间: |
|
| 查看次数: |
652 次 |
| 最近记录: |