2017-10-16 18 views
0

認証の問題によりリクエストが失敗した場合は、myfunctionmyfunctionに電話する必要があります。以下のコードを参照してください。関数自体を正しく呼び出す方法は?

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に電話するだけで十分ですか?

+5

*「リターン」と呼ぶだけでいいですか?* - 試しましたか?何が起こった? – jonrsharpe

+0

ここにコードがないかもしれませんが、あなたのパラメータはあらかじめ割り当てられていません。あなたの目標は何ですか?あなたの質問は私にはあいまいです。 – scharette

+0

@jonrsharpe、はい、私は試してみましたが、いくつかの問題がありましたが、この特定の行に関連するかどうかはわかりません。結果として、私はそれがどのように動作するかを学ぶことに決めました。 –

答えて

-3

この関数をreqeiteにすると、戻り値は1つだけになるので、理解しやすくなります。それ以外のすべてのリターンステートメントは、2つのオブジェクトを返す関数シグネチャを尊重する必要があります。それはなぜ異なっているのでしょうか?

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 
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 
関連する問題