2016-10-31 13 views
1

私は定義された機能を持つ推測ゲームプログラムを書いています。ユーザーに1から1000までの数字を考えるように求め、プログラムは15回未満の試行で数字を推測しようとします。私の関数では、各関数で複数の値を返すために、それらをリストとして返します。しかし、NoneTypeエラーがあります - ここにエラーメッセージがあります。whileループのリストでタイプエラーが発生しましたか?

while opAns.lower() != "no": 
    FBTrcTri = guessReturn(tries, upper, lower) 
    feedback = FBTrcTri[0] 
    errorBound = FBTrcTri[1] 
    errorTrick = FBTrcTri[2] 
    tries = FBTrcTri[3] 

および機能は、ここで定義されています:

Traceback (most recent call last): 
    File "python", line 187, in <module> 
    File "python", line 167, in main 
TypeError: 'NoneType' object is not subscriptable 

ここに私のコードは値を持たない

def guessReturn(tries, upper, lower): 
    while tries < 15: 


     errorInput = "yes" 

     while errorInput == "yes": 
      feedbackGuessVal = guesser(upper, lower) 


      feedback = feedbackGuessVal[0] 
      guessVal = feedbackGuessVal[1] 


      LUITri = processData(feedback, tries, upper, lower, guessVal) 


      lower = LUITri[0] 
      upper = LUITri[1] 
      errorInput = LUITri[2] 
      tries = LUITri[3] 


      errorBound = boundChecker(upper, lower) 
      errorTrick = trickChecker(upper, lower) 

      if errorBound == "yes": 
       return 
      elif errorTrick == "yes": 
       return 
      elif feedback == "0": 
       tries += 1 
       return 


     tries += 1 


    return [feedback, errorInput, errorBound, errorTrick, tries] 
+1

あなたの 'guessReturn'関数には何も返さない/' None'、つまり 'return'というインスタンスがたくさんあります –

答えて

2
if errorBound == "yes": 
    return 
elif errorTrick == "yes": 
    return 
elif feedback == "0": 
    tries += 1 
    return 

return文はあなたがしようとしているNoneを返します。リストとして扱う

2

このエラーは、サブタイプの構文([...])を、タイプがNoneType(つまり、タイプ0)のオブジェクトで使用しようとしていることを示しています。シングルトンオブジェクトであるNone)。

あなたguessReturn()機能は、いくつかの場所でNoneを返します:明示的な戻り値を持つ

if errorBound == "yes": 
    return 
elif errorTrick == "yes": 
    return 
elif feedback == "0": 
    tries += 1 
    return 

returnNoneを返します。

あなたがしてその結果をサブスクライブしようとしている:あなたはFBTrcTriNoneTypeErrorをキャッチするために取り扱いまたは使用の例外)であれば、明示的にテストする必要があり、または少なくとも4つの値を返しますのいずれか

feedback = FBTrcTri[0] 

リストまたはタプルで常に、関数のすべての終了点から。

関連する問題