【问题标题】:How do you skip over a list comprehension in Python's debugger (pdb)?如何跳过 Python 调试器 (pdb) 中的列表理解?
【发布时间】:2011-06-10 15:28:42
【问题描述】:

pdb 中,next 指令不会跳过列表推导,而是逐步完成每次迭代。有没有办法跳过它们,以便在列表理解后的下一行继续调试?

我不得不求助于列出代码,在下一行设置断点,然后继续执行到下一个断点。这很烦人,我想一定有更好的方法。

【问题讨论】:

    标签: python list-comprehension pdb


    【解决方案1】:

    您可以使用until 命令。 help untilpdb 中的输出:

    unt(il)
    继续执行,直到数字大于当前行 一个到达或直到当前帧返回

    【讨论】:

      【解决方案2】:

      详细说明 Sven 的回复,因为我最近不得不向同事描述 untilnext。它不是特定于 stuck 的列表理解,但通常是 for 循环。:

      until 命令类似于next,只是它显式地继续执行,直到执行到同一函数中行号高于当前值的行。

      这意味着您可以使用until 跳过循环

      为了完整起见,仅覆盖 stepnext

      step命令用于执行当前行,然后在下一个执行点停止

      这意味着它将逐条执行。注意与; 连接的指令将作为一条指令处理。

      var A=0; var B=0 #Note: that will count as one instruction
      

      next 命令类似于 step,但不输入从正在执行的语句调用的函数。实际上,它在单个操作中从函数调用一直到当前函数中的下一条语句。

      next 有助于跳过多条指令,在具有多个变量定义的函数中,它将跳过所有指令。

      这是一个演示场景的示例:

      示例:pdb_until.py

      aVar = 3
      x = [i for i in range(0,30)]
      bVar = 5
      

      使用 Pdb 运行:

      python -m pdb pdb_until.py
      

      开始我们的互动会话:

      > pdb_until.py(1)<module>()
      -> aVar = 3
      (Pdb) step                #our Input, we step
      > pdb_until.py(2)<module>()
      -> x = [i for i in range(0,10)]
      (Pdb) next                #our Input, next
      > pdb_until.py(2)<module>()
      -> x = [i for i in range(0,10)]
      (Pdb) next                #our Input, we are now stuck on line 2
      > pdb_until.py(2)<module>()
      -> x = [i for i in range(0,10)]
      (Pdb) until               #our Input, until steps over (runs list comp)
      

      来源:Python 标准库示例,Doug Hellmann

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-12-12
        • 2020-01-18
        • 2021-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多