这是我打算做的事情:
def foo(flag):
"""
other irrelevant code
"""
if flag:
import random
return random.random()
"""
other irrelevant code
"""
raise Exception()
我知道mock
可用于更改类或函数的行为,但不确定如何使用它来返回而不是引发异常。
我想知道mock
是否有任何方式可以将此raise
更改为返回内容,而不会影响其他代码
答案 0 :(得分:0)
我发现wraps
参数对这种情况很有帮助。在这里,我创建了一个泛型函数capture
,它将传递任何返回值,但会将异常转换为返回值。然后我将mock.patch
与wraps
参数一起使用。
我使用functools.partial
让capture
函数知道我们要包装的内容。
未经测试,但这应该给出基本的想法。
def capture(fn, *args, **kwargs):
try: return fn(*args, **kwargs)
except Exception: return whatever_you_like
importe module, functools
with mock.patch('module.foo', wraps = functools.partial(capture, module.foo)):
do stuff