如何打破pycharm中的`pass`

时间:2017-12-04 02:05:32

标签: python debugging pycharm

在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."

4 个答案:

答案 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

然后在该行上设置断点。

优势:

  1. 它允许您在此处设置断点。 (您想做什么。)
  2. 一旦您习惯了这种习语,您就会知道它的真正含义。
  3. 您不时地可以遍历代码,并删除不再使用的旧代码。

缺点:

  1. 如果您不定期删除代码,则会使代码混乱。
  2. 合作者可能对您的工作感到困惑。
  3. 如果将它们留在生产代码中,可能会对性能造成轻微影响(取决于Python是否对其进行了优化)。

答案 3 :(得分:0)

断点函数

breakpoint() 适用于:

  • Python >= 3.7
  • 内置代码清理提醒。
  • 始终活跃;无法通过单击鼠标将其关闭。

一个伪打印语句

但是当我想打开和关闭它时,我使用了一个打印函数,而实际上并没有通过 () 调用它;像这样:

for i in range(999999):
    print                 # Toggle breakpoint on this line

虚拟变量赋值

这比分配一个虚拟变量要好,因为它不会弄乱我的命名空间(这使得调试更容易),而且 PyCharm 不会警告我未使用的变量。

省略号

省略号解决方案在我的 PyCharm 上对我不起作用。