You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过pdb修改函数返回值以绕过断言执行后续代码?

如何用pdb绕过AssertionError并打印"Hello world"

当然可以,给你几个可行的实操方案:

方案一:强制函数立即返回True

当程序在breakpoint()处停住时,直接输入:

return True

这个命令会让函数立刻终止并返回True,跳过原本的return False语句。接着输入c继续执行,assert会因为返回值为True通过检查,后续的print("Hello world")就正常运行了。

方案二:在返回流程中修改返回值

如果想走完函数的执行流程再改返回值,按步骤来:

  1. 停在breakpoint()时,输入n执行到return False这一行
  2. 输入s单步进入返回模式,此时pdb会显示--Return--的提示
  3. 输入retval True(注意不要加等号,这是pdb的命令),直接修改函数返回值
  4. 输入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 13:31:05