如何解决:TypeError:-:'NoneType'和'NoneType'不受支持的操作数类型?

时间:2020-03-30 12:56:46

标签: python pycharm typeerror nonetype

我是python的新手。我尝试创建剪刀石头布游戏,但收到错误:

TypeError:-:“ NoneType”和不支持的操作数类型 'NoneType'

在线: dif = a-b

我尝试在Google和Stackoverflow上搜索解决方案,发现的几乎所有答案都表明它必须要更改打印才能返回。我尝试在多个地方这样做,但最终出现了更多错误,因此我要问这个问题。

有人知道如何解决此特定代码的错误吗? 谢谢!

代码:

while True:
    dictionary = {"steen": 1, "papier": 2, "schaar": 3}

    p1 = raw_input("Maak een keuze: steen, papier of schaar:")
    p2 = raw_input("Maak een keuze: steen, papier of schaar:")
    a = dictionary.get(p1)
    b = dictionary.get(p2)
    dif = a - b

    if dif in [1, -2]:
        print ("Speler 1 heeft gewonnen")
        if str(input("Wilt u nog een keer spelen, ja of nee?")) == "Ja":
            continue
        else:
            print ("Game over")
            break
    elif dif in [-1, 2]:
        print ("Speler 2 heeft gewonnen")
        if str(input("Wilt u nog een keer spelem, ja of nee?")) == "Ja":
            continue
        else:
            print ("Game over")
            break
    else:
        print ("Gelijkspel")
        if str(input("Wilt u nog een keer spelen, ja of nee?")) == "Ja":
            continue
        else:
            print ("Game over")
            break

3 个答案:

答案 0 :(得分:1)

a = dictionary.get(p1)行可能返回None。或之后的那一行。

我建议使用调试器,并在出现故障的线路上暂停。

答案 1 :(得分:0)

因此,我尝试了更多操作,并且我想知道为什么会收到该错误。 我想我在答案前留出一个空格作为输入。因此,我没有回答“ rock”,而是回答了“ rock”。因此,由于字典中没有“ rock”,因此没有分配给输入的整数值,这使dif行给了我一个错误。

对于可能遇到相同问题的任何人,这就是我所做的,因此,如果输入略有偏离,我不会收到错误提示(现在它将告诉用户输入不正确,他们应该尝试其他):

while True:

dictionary = {"steen": 1, "papier": 2, "schaar": 3}
p1 = raw_input("Speler 1, maak een keuze: steen, papier of schaar: ")
p2 = raw_input("Speler 2, maak een keuze: steen, papier of schaar: ")
a = dictionary.get(p1)
b = dictionary.get(p2)
antwOpties = ["steen", "papier", "schaar"]

if p1 not in antwOpties or p2 not in antwOpties:
    print ("U heeft een ongeldig antwoord ingevuld, kies schaar, steen of papier")
    continue

dif = a - b
if dif in [1, -2]:
    print ("Speler 1 heeft gewonnen")
    if str(input("Wilt u nog een keer spelen, ja of nee?")) == "Ja":
        continue
    else:
        print ("Game over")
        break
elif dif in [-1, 2]:
    print ("Speler 2 heeft gewonnen")
    if raw_input("Wilt u nog een keer spelem, ja of nee?") == "Ja":
        continue
    else:
        print ("Game over")
        break
else:
    print ("Gelijkspel")
    if raw_input("Wilt u nog een keer spelen, ja of nee?") == "Ja":
        continue
    else:
        print ("Game over")
        break

因此,首先,我创建了一个包含可能答案的列表,称为antwOpties。然后,我创建了一段代码,用于检查播放器1和2的输入是否在该列表中。如果不是这种情况,它将打印出来并要求其他输入,然后由于“ continue”而返回到循环的开头。最后,我将“ dif = a-b”移到该代码段的下方,该代码段检查输入是否有效。我这样做是为了避免输入无效(因为如果输入在答案中并因此对应于整数,那么它只会经过“继续”)。

答案 2 :(得分:0)

代码实际上在正确的输入下工作。使用输入[“ steen,” papier“,” schaar“]

中的任何人进行输入