2016-10-31 45 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个值在列表或元组总是,从你的函数的所有出口点。