0

我在尝试和 except 块时遇到了一个奇怪的问题,我用它来捕捉无效数据输入到我正在写的一个简单的黑杰克游戏.....

def PickNumberOfPlayers():
    global log

    try:
        inputs = int(input("How Many Players Would You Like?: "))
        PlayersNumber = inputs
        log.write("How Many Players Would You Like?: \n")
        return PlayersNumber

    except ValueError:
        print("Try Typing in A Valid Number")
        log.write("Try Typing in A Valid Number\n")
        PickNumberOfPlayers()

然后我有一个方法 GameStart() 启动许多方法调用:

def GameStart():
    global ListOfPlayers

    for i in range(0, int(PickNumberOfPlayers())):
        name = input("What Would You Like This Players Name To Appear As?:")
        ListOfPlayers.update({name: Player(0, name)})

    for key, value in ListOfPlayers.items():
        value.AccountSetup()
        value.Bet()

    for key, value in ListOfPlayers.items():
        value.PlayerDeal()
    Dealer.Deal() 

当我运行代码并输入正确的值(一个有效的整数)时,没有问题。当我第一次输入无效数字(字符串或字符)时,我收到相应的消息“尝试输入有效数字,然后当我输入有效整数时,我收到错误 -

    for i in range(0, int(PickNumberOfPlayers())):
TypeError: int() argument must be a string or a number, not 'NoneType' 

任何想法?

4

2 回答 2

1

您应该修改 PickNumberOfPlayers 以始终返回一个 int。

def PickNumberOfPlayers():
    global log

    while 1:
        try:
            return int(input("How Many Players Would You Like?: "))
        except ValueError:
            print("Try Typing in A Valid Number")
            log.write("Try Typing in A Valid Number\n")
于 2014-05-21T20:56:24.957 回答
1

当你调用PickNumberOfPlayers()你的except时,你不会返回它的值。return PickNumberOfPlayers()改为这样做。

于 2014-05-21T20:52:29.880 回答