Python 如何解决:TypeError:';非类型';和';非类型';?

Python 如何解决:TypeError:';非类型';和';非类型';?,python,pycharm,typeerror,nonetype,Python,Pycharm,Typeerror,Nonetype,我对python非常陌生。我试图创建一个石头剪刀游戏,但我收到了错误: TypeError:-:“NoneType”和的操作数类型不受支持 “非类型” 在线: dif=a-b 我试着在谷歌和Stackoverflow上搜索解决方案,我找到的几乎所有答案都说它必须改变打印才能返回。我试着在几个地方这样做,但我最终得到了更多的错误,所以我问这个问题 有人知道如何解决这个特定代码的错误吗? 谢谢 代码: 行a=dictionary.get(p1)可能返回None。或者后面的那条线 我建议使用调试器,并

我对python非常陌生。我试图创建一个石头剪刀游戏,但我收到了错误:

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

在线: dif=a-b

我试着在谷歌和Stackoverflow上搜索解决方案,我找到的几乎所有答案都说它必须改变打印才能返回。我试着在几个地方这样做,但我最终得到了更多的错误,所以我问这个问题

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

代码:


a=dictionary.get(p1)
可能返回None。或者后面的那条线


我建议使用调试器,并暂停错误行。

因此我尝试了更多的方法,我想我知道了收到错误的原因。 我想我在答案前加了一个空格作为输入。因此,我没有回答“rock”,而是回答了“rock”,因此没有为我的输入分配整数值,因为“rock”不在我的字典中,这使得dif行给了我一个错误

对于可能遇到相同问题的任何人,我这样做是为了在输入稍有偏差时不会收到错误(现在会告诉用户输入不正确,他们应该尝试其他方法):


所以首先,我创建了一个包含可能答案的列表,称为antwOpties。然后我创建了一段代码来检查播放器1和2的输入是否在该列表中。如果不是这样,它会打印出来并请求其他输入,然后通过“continue”返回到循环的开头。最后我把“dif=a-b”移到代码下面,检查输入是否有效。我这样做是为了,如果输入无效,它就不会通过(因为它只会通过“continue”如果输入在答案中,因此对应于一个整数。

dict.get
将在默认情况下返回
None
,如果该键丢失,并且
None
不支持数学运算,那么在python中附加错误时,如果您还指定了错误发生的行,则会有所帮助。C.Nivs,感谢您的帮助首先回答。我真的不知道“关键”是什么,这里缺少了什么?如果是的话,我应该调整什么?我确实理解你答案的第二部分,这是有道理的。我希望你能进一步详细说明缺少的关键部分。提前谢了!嗨,NadavS,啊,是的,当然,我很抱歉,第一次在这里发布哈哈。错误是dif=a-bOkay上出现的消息谢谢你的回答。我将在YouTube上查找如何做到这一点。谢谢!:-)
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
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