如何通过pdb修改函数返回值以绕过断言执行后续代码?
如何用pdb绕过AssertionError并打印"Hello world"
当然可以,给你几个可行的实操方案:
方案一:强制函数立即返回True
当程序在breakpoint()处停住时,直接输入:
return True
这个命令会让函数立刻终止并返回True,跳过原本的return False语句。接着输入c继续执行,assert会因为返回值为True通过检查,后续的print("Hello world")就正常运行了。
方案二:在返回流程中修改返回值
如果想走完函数的执行流程再改返回值,按步骤来:
- 停在
breakpoint()时,输入n执行到return False这一行 - 输入
s单步进入返回模式,此时pdb会显示--Return--的提示 - 输入
retval True(注意不要加等号,这是pdb的命令),直接修改函数返回值 - 输入
c继续执行,assert通过,print语句正常输出
方案三:直接跳转到print语句
如果知道print语句的行号(比如原代码里它在第6行),可以直接跳过整个assert检查:
- 停在
breakpoint()时,输入jump 6(把6换成实际的print行号) - 输入
c继续执行,程序会直接跳到print语句执行,完全绕开assert
你之前踩的坑:
- 用
retval=True是语法错误,retval是pdb命令,正确用法是retval 目标值 locals()['__return__']=True没用是因为__return__只是pdb用来显示的变量,不是真正控制返回值的核心变量interact里输入return True会报错,因为interact是进入普通Python交互环境,这里的return无法控制pdb的函数返回流程
内容的提问来源于stack exchange,提问作者C4stor
相关产品推荐
相关产品推荐

