当请求因授权问题而失败时,我应该从myfunction
调用myfunction
。请参阅下面的代码。
def myfunction(parm1, parm2, parm3, parm4=None):
error_text = None
result = None
response, error_code = do_some_external_call()
if error_code == 401: # auth_error
login()
result, error_text = myfunction(parm1, parm2, parm3, parm4)
return result, error_text # ???
if response:
result = response.result
return result, error_text
我应该在标有result, error_text
的行返回???
吗?或者仅仅拨打return
答案 0 :(得分:0)
当你可以使用一个简单的循环时,不要使用递归。
def myfunction(parm1, parm2, parm3, parm4=None):
while True:
response, error_code = do_some_external_call()
if error_code == 401:
login()
else:
break
return getattr(response, 'result', None), error_code
答案 1 :(得分:0)
直接返回函数很好,你可以在REPL中轻松地测试它。这是我能想到的最快的例子:
def reccy3(x):
if x <= 1:
return x, 1
return reccy3(x-1)
对于您的代码,您似乎无法在任何地方设置error_text
,因此我假设您的意思是error_code
。您可以轻松修改以下内容以包含error_text
,但是您正在使用它。
def myfunction(parm1, parm2, parm3, parm4=None):
response, error_code = do_some_external_call()
if error_code == 401: # auth_error
login()
return myfunction(parm1, parm2, parm3, parm4)
if response:
return response.result, None
return None, error_code
答案 2 :(得分:-3)
你应该要求这个功能,所以它只有一个回报 - 它会更容易理解。除此之外,当然,所有返回语句都必须遵守返回两个对象的函数签名。为什么会有所不同?