【问题标题】:How to skip over line throwing exception when debugging调试时如何跳过行抛出异常
【发布时间】:2017-08-18 00:51:32
【问题描述】:
# process_with_huge_time_overhead()
list_a = [1,2,3]
print(list_a[3])
# process_with_huge_time_overhead()
new_data = [5,6,7]
list_a += new_data

在ipdb(通过python -m ipdb script.py调用)到达这一行后,抛出异常:IndexError

如何才能继续调试和跳转而不经历再次到达这一点的开销

如果我跳到第 62 行并使用n 命令执行下一行,它不起作用。每个n 只是继续退出程序。

【问题讨论】:

  • 我会说最好在那里为异常添加代码..如果异常然后继续
  • 尝试:do_something() 例外:通过

标签: python pycharm pdb ipdb


【解决方案1】:

如果不更改程序,您将无法做到这一点。

调试器跟随代码执行。如果抛出错误,调试器将继续遵循错误处理的程序流程。如果错误不是由您处理,则会发出崩溃。这是预期的行为,调试器将遵循它。

【讨论】:

  • 是的,这就像我想将 script.py 中的所有内容逐行传输到 python shell ... python shell 能够运行引发异常的代码,而不会关闭并丢失当前变量和上下文。这就是我想要的行为!来自 Visual Studio C# 调试环境,我觉得难以置信的是 python 没有这个功能,尤其是作为脚本语言。
【解决方案2】:

你可以这样做

try: 
    list_a = [1,2,3]
except Exception:
    pass
print(list_a[3])
# process_with_huge_time_overhead()
new_data = [5,6,7]
list_a += new_data

为什么我们不能跳过使用 pdb。

是的,我们可以通过更改堆栈帧数据

pdb 在任何堆栈帧的上下文中检查任意 Python 代码。所以跳过的一种方法是更改​​堆栈帧数据(间接地您将更改整个逻辑)。最好是处理代码异常

由于您使用的是 pycharm,您可以设置值或在 pdb 中更改值。但不建议这样做(因为这会改变逻辑)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2012-05-23
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多