2017-07-06 9 views
0

を実行なぜ、私は基本的にこれを行う機能を持っている:Pythonは:私の関数はNoneを返しますし、そのように

import os 
import json 
import requests 
from openpyxl import load_workbook 

def function(data): 
    statuslist = [] 
    for i in range(len(data[0])): 
     result = performOperation(data[0][i]) 
     if result in satisfying_results: 
      print("its okay") 
      statuslist.append("Pass") 
     else: 
      print("absolutely not okay") 
      statuslist.append("Fail" + result) 
    return statuslist 

をその後、私はこのような機能を呼び出す(私は何だろうチェックするためにエラー処理を追加しました関数はNoneを返し、その後、実行されると、)この質問を私のための理由によりつまずく後に発生し、実際の結果に驚きました。

statuslist = function(data) 
print(statuslist) 
try: 
    for i in range(len(statuslist)): 
     anotherFunction(i) 
     print("Confirmation that it is working") 
except TypeError: 
    print("This is utterly nonsense I think") 

次のようにプログラムの出力は次のようになります。

None 
This is utterly nonsense I think 
its okay 
its okay 
its okay 
absolutely not okay 
its okay 

関数の最後には単一のreturn文しかありません。関数は再帰的ではなく、かなり単純でトップダウンです(ただし、その間に多くのデータを解析します)。

出力ログからは、最初にNoneが返され、正しく実行されたように見えます。私は困惑していて、インターネット上で同様の問題を見つけることができませんでした。 コードに矛盾があったとしても、代わりに[]を返すと思います。

初期リストをstatuslist = ["WTF"]に変更すると、戻り値は[]になります。 関数(データ)で実行された他の関数のリストを変更したことを除外するために、初期リストの名前を何度か変更しました。問題をデバッグするヒントに非常に感謝しています。なぜ関数は最初に値を返し、その後に実行されますか?

+0

これを再現するのに十分な情報がないようです。最初の関数のforループで 'data [0]'を意味しますか?たくさんのコードをコメントアウトしてから、それを元に戻して何が起こるかを確認するとどうなりますか? – doctorlove

+1

'data'、' performOperation() '、' satisfying_results'、 'anotherFunction'の問題を再現できません。 –

+0

再現性がありません。 [mcve]を提供してください。 –

答えて

0

私のコードで発生したコードをフルスペクトラムで表示し、読みやすく、会社のセキュリティポリシーを妨げないコードを書くことはできませんが、私はよりシンプルなフォーム(私は3ヶ月のプログラミング経験がある間に元のコードが書かれています)、この問題はもはや再現されません。私は間違った解釈をした関数の入れ子のレベルがあると思います。この書き直したコードは、ほぼ同じことをして、私に期待されるリストを返します。

お時間をいただき、ありがとうございます。

答えは次のように見えます。あなた自身のコードを理解できず、簡単にしてください。

関連する問題