2016-10-31 21 views
1

我正在寫一個猜謎遊戲程序,具有定義的功能。它要求用戶考慮1到1000之間的數字,然後程序嘗試在少於15次的嘗試中猜出數字。通過我的函數,爲了在每個函數中返回多個值,我將它們作爲列表返回。但是有一個NoneType錯誤 - 這是錯誤信息。None類型的錯誤與while循環中的列表?

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

這裏是我的代碼:

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

而且功能定義如下:

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的對象上使用訂閱語法([...])(即,單身對象None)。

guessReturn()函數返回的幾個地方None

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

return沒有明確的返回值返回None

您正在嘗試訂閱與這個結果:

feedback = FBTrcTri[0] 

你要麼必須明確地測試是否FBTrcTriNone(或使用異常處理趕上TypeError),或返回至少4個值在列表或元組總是,從你的函數的所有出口點。