【问题标题】:TypeError: argument of type 'NoneType' is not iterableTypeError:“NoneType”类型的参数不可迭代
【发布时间】:2014-05-02 06:11:15
【问题描述】:

我正在用 Python 制作一个 Hangman 游戏。在游戏中,一个 python 文件有一个函数,它从数组中选择一个随机字符串并将其存储在一个变量中。然后将该变量传递给另一个文件中的函数。该函数将用户猜测作为字符串存储在变量中,然后检查该猜测是否在单词中。但是,每当我输入一个字母并按 Enter 键时,我都会在这个问题的标题中看到错误。请注意,我使用的是 Python 2.7。下面是接受单词的函数的代码:

import random

easyWords = ["car", "dog", "apple", "door", "drum"]

mediumWords = ["airplane", "monkey", "bananana", "window", "guitar"]

hardWords = ["motorcycle", "chuckwalla", "strawberry", "insulation", "didgeridoo"]

wordCount = []

#is called if the player chooses an easy game. 
#The words in the array it chooses are the shortest.
#the following three functions are the ones that
#choose the word randomly from their respective arrays.
def pickEasy():
    word = random.choice(easyWords)
    word = str(word)
    for i in range(1, len(word) + 1):
        wordCount.append("_")

#is called when the player chooses a medium game.
def pickMedium():
    word = random.choice(mediumWords)
    for i in range(1, len(word) + 1):
        wordCount.append("_")

#is called when the player chooses a hard game. 
def pickHard():
    word = random.choice(hardWords)
    for i in range(1, len(word) + 1):
        wordCount.append("_")

现在这里是让用户猜测并确定它是否在为游戏选择的单词中的代码(不要注意 wordCount 变量。另外,“words”是带有代码的文件的名称上面。)):

from words import *
from art import *

def gamePlay(difficulty):
    if difficulty == 1:
        word = pickEasy()
        print start
        print wordCount
        getInput(word)

    elif difficulty == 2:
        word = pickMedium()
        print start
        print wordCount

    elif difficulty == 3:
        word = pickHard()
        print start
        print wordCount

def getInput(wordInput):
    wrong = 0
    guess = raw_input("Type a letter to see if it is in the word: \n").lower()

    if guess in wordInput:
        print "letter is in word"

    else:
        print "letter is not in word"

到目前为止,我已经尝试使用 str() 将 gamePlay 函数中的“guess”变量转换为字符串,我尝试使用 .lower() 将其变为小写,并且在 words 文件中做了类似的事情.这是我运行此程序时得到的完整错误:

File "main.py", line 42, in <module>
    main()
  File "main.py", line 32, in main
    diff()
  File "main.py", line 17, in diff
    gamePlay(difficulty)
  File "/Users/Nathan/Desktop/Hangman/gameplay.py", line 9, in gamePlay
    getInput(word)
  File "/Users/Nathan/Desktop/Hangman/gameplay.py", line 25, in getInput
    if guess in wordInput:

你看到的“main.py”是我写的另一个python文件。如果你想看其他人,请告诉我。但是,我觉得我展示的那些是唯一重要的。感谢您的时间!如果我遗漏了任何重要的细节,请告诉我。

【问题讨论】:

    标签: python python-2.7


    【解决方案1】:

    如果一个函数没有返回任何东西,例如:

    def test():
        pass
    

    它有一个隐式返回值None

    因此,由于您的 pick* 方法不返回任何内容,例如:

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

    调用它们的行,例如:

    word = pickEasy()
    

    word 设置为None,因此getInput 中的wordInputNone。这意味着:

    if guess in wordInput:
    

    相当于:

    if guess in None:
    

    NoneNoneType 的一个实例,它不提供迭代器/迭代功能,因此您会收到该类型错误。

    解决方法是添加返回类型:

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

    【讨论】:

    • 非常感谢!这解决了问题。还有一个问题,你知道如何判断一个字母在字符串中的位置吗?所以如果这个词是“狗”,玩家猜“o”,我怎么知道他们猜的字母是这个词的第二个字符?如果不知道或者不想回答也没关系。谢谢。
    • 我不知何故无法编辑这个答案,但我会写 return statement 而不是 return type。返回类型未(也不必)定义。
    【解决方案2】:

    python 错误表明 wordInput 不是可迭代的 -> 它属于 NoneType。

    如果您在违规行之前打印wordInput,您将看到wordInputNone

    由于wordInputNone,这意味着传递给函数的参数也是None。在这种情况下word。您将pickEasy 的结果分配给word

    问题是你的pickEasy 函数没有返回任何东西。在 Python 中,不返回任何内容的方法会返回 NoneType。

    我想你想返回一个word,所以这就足够了:

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

    【讨论】:

      猜你喜欢
      • 2011-10-04
      • 2019-04-15
      • 2012-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多