如何在调试时跳过线上抛出异常

时间:2017-08-18 00:51:32

标签: python pycharm pdb ipdb

# 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 enter image description here

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

如果我跳转到第62行并使用n命令执行下一行,则它不起作用。每个n只会继续退出该计划。

enter image description here

2 个答案:

答案 0 :(得分:1)

如果不更改程序,则无法执行此操作。

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

答案 1 :(得分:0)

你可以做这样的事情

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代码。所以跳过的一种方法是更改​​堆栈帧数据(间接你将改变整个逻辑).Best是处理代码异常

由于您正在使用pycharm,您可以设置值,或者在pdb中更改值。但不推荐使用(因为这会更改逻辑)

Set value in debugger