TypeError: argument of type 'NoneType' is not iterable

前端 未结 2 928
攒了一身酷
攒了一身酷 2020-12-28 11:01

I am making a Hangman game in Python. In the game, one python file has a function that selects a random string from an array and stores it in a variable. That variable is th

相关标签:
2条回答
  • 2020-12-28 11:08

    If a function does not return anything, e.g.:

    def test():
        pass
    

    it has an implicit return value of None.

    Thus, as your pick* methods do not return anything, e.g.:

    def pickEasy():
        word = random.choice(easyWords)
        word = str(word)
        for i in range(1, len(word) + 1):
            wordCount.append("_")
    

    the lines that call them, e.g.:

    word = pickEasy()
    

    set word to None, so wordInput in getInput is None. This means that:

    if guess in wordInput:
    

    is the equivalent of:

    if guess in None:
    

    and None is an instance of NoneType which does not provide iterator/iteration functionality, so you get that type error.

    The fix is to add the return type:

    def pickEasy():
        word = random.choice(easyWords)
        word = str(word)
        for i in range(1, len(word) + 1):
            wordCount.append("_")
        return word
    
    0 讨论(0)
  • 2020-12-28 11:08

    The python error says that wordInput is not an iterable -> it is of NoneType.

    If you print wordInput before the offending line, you will see that wordInput is None.

    Since wordInput is None, that means that the argument passed to the function is also None. In this case word. You assign the result of pickEasy to word.

    The problem is that your pickEasy function does not return anything. In Python, a method that didn't return anything returns a NoneType.

    I think you wanted to return a word, so this will suffice:

    def pickEasy():
        word = random.choice(easyWords)
        word = str(word)
        for i in range(1, len(word) + 1):
            wordCount.append("_")
        return word
    
    0 讨论(0)
提交回复
热议问题