是否可以使用pdb更改函数的返回值?

问题描述 投票:0回答:1

假设我有以下代码:

def returns_false():
  breakpoint()
  return False

assert(returns_false())
print("Hello world")

是否有一系列 pdb 命令可以在不首先触发断言错误的情况下打印“Hello world”?

我尝试过的:

  • return True
  • s
    进入返回模式,然后按
    retval=True
    locals()['__return__']=True
  • interact
    ,然后
    return True
    ,但这会引发异常

但是这些都不会改变实际的返回值

python pdb
1个回答
0
投票

只想提供两个想法:

第一个是使用包装函数来覆盖。就像:

def returns_false():
  breakpoint()
  return False

def wrapper():
  result = returns_false()
  return True

assert(wrapper())
print("Hello world")

或者,使用上下文管理器来修改函数的返回值。

class OverrideReturnValue:
    def __init__(self, func, new_value):
        self.func = func
        self.new_value = new_value

def returns_false():
  breakpoint()
  return False

with OverrideReturnValue(returns_false, True):
    assert(returns_false())
    print("Hello world")
© www.soinside.com 2019 - 2024. All rights reserved.