ValueError: int() 以 10 为底的无效文字:'stop'

Posted

技术标签:

【中文标题】ValueError: int() 以 10 为底的无效文字:\'stop\'【英文标题】:ValueError: invalid literal for int() with base 10: 'stop'ValueError: int() 以 10 为底的无效文字:'stop' 【发布时间】:2013-05-20 11:53:31 【问题描述】:

每次我尝试编写代码时它都可以工作,但是当我输入 'stop' 时它给我一个错误:

ValueError: int() 以 10 为底的无效文字:'stop'

def guessingGame():
    global randomNum
    guessTry = 3

    while True:
        guess = input('Guess a Number between 1 - 10, You have 3 Tries, or Enter Stop:  ')
        if int(guess) == randomNum:
            print('Correct')
            break

        if int(guess) < randomNum:
            print('Too Low')
            guessTry = guessTry - 1
            print('You have, ' + str(guessTry) + ' Guesses Left')

        if int(guess) > randomNum:
            print('Too High')
            guessTry = guessTry - 1
            print('You have, ' + str(guessTry) + ' Guesses Left')

        if guessTry == 0:
            print('You have no more tries')
            return

        if str(guess) == 'stop' or str(guess) == 'Stop':
            break

【问题讨论】:

【参考方案1】:

您正在尝试将字符串“stop”转换为整数。该字符串没有有效的整数表示,因此您会收到该错误。你应该把

if str(guess) == 'stop' or str(guess) == 'Stop':
break

作为第一次检查

另一个建议是在输入中使用小写字母,然后检查小写字母“stop”。这样,您只需检查一次,它就会捕获“停止”、“停止”、“停止”等。

if str(guess).lower() == 'stop':
break

【讨论】:

(不是你的代码中的错误,只是一个建议)而不是检查小写和驼峰大小写,为什么不将字符串转换为小写/大写(因为我假设你不关心大小写灵敏度)?然后它会捕捉到以下任何一个:'stop'、'Stop'、'STOP'等你明白了if str.lower(guess) == 'stop' @pablo:Python 中没有“演员表”之类的东西。 int 是一个类型(一个类),int(somestring) 实例化了一个新的 int。【参考方案2】:

传递给int() 的字符串应该只包含数字:

>>> int("stop")
Traceback (most recent call last):
  File "<ipython-input-114-e5503af2dc1c>", line 1, in <module>
    int("stop")
ValueError: invalid literal for int() with base 10: 'stop'

快速解决方法是在此处使用exception handling:

def guessingGame():
    global randomNum
    global userScore
    guessTry = 3

    while True:
        guess = input('Guess a Number between 1 - 10, You have 3 Tries, or Enter Stop:  ')
        try:
            if int(guess) == randomNum:
                print('Correct')
                break

            if int(guess) < randomNum:
               print('Too Low')
               guessTry = guessTry - 1
               print('You have, ' + str(guessTry) + ' Guesses Left')

            if int(guess) > randomNum:
                print('Too High')
                guessTry = guessTry - 1
                print('You have, ' + str(guessTry) + ' Guesses Left')

            if guessTry == 0:
                print('You have no more tries')
                return
        except ValueError:
            #no need of str() here
            if guess.lower() == 'stop':
                break
guessingGame()

您可以使用guess.lower() == 'stop' 匹配“stop”的任何大小写组合:

>>> "Stop".lower() == "stop"
True
>>> "SToP".lower() == "stop"
True
>>> "sTOp".lower() == "stop"
True

【讨论】:

根据 Andenthal 对其他答案的评论,您可以使用 if guess.lower() == 'stop' 并捕捉所有“停止”大写的可能性。 FWIW,一次就够了,最好不要调用int 3次,尽量缩短try块。 为了记录,传递给int()的字符串可能包含前导和尾随空格以及数字。【参考方案3】:

这是一个更 Pythonic (Python 3) 的版本。

def guessing_game(random_num):
    tries = 3
    print("Guess a number between 1 - 10, you have 3 tries, or type 'stop' to quit")

    while True:
        guess = input("Your number: ")
        try:
            guess = int(guess)
        except (TypeError, ValueError):
            if guess.lower()  == 'stop' :
                return
            else:
                print("Invalid value '%s'" % guess)
                continue

        if guess == random_num:
            print('Correct')
            return
        elif guess < random_num:
            print('Too low')
        else:
            print('Too high')

        tries -= 1
        if tries == 0:
            print('You have no more tries')
            return

        print('You have %s guesses left' % tries)

【讨论】:

以上是关于ValueError: int() 以 10 为底的无效文字:'stop'的主要内容,如果未能解决你的问题,请参考以下文章

ValueError: int() 以 10 为底的无效文字:'10025.0'

ValueError:int() 的无效文字,以 10 为底错误

ValueError: int() 以 10 为底的无效文字:'196.41'

用户输入给出“ValueError:int() 以 10 为底的无效文字:”

如何修复:ValueError:long() 以 10 为底的无效文字

Django 管理员,自定义视图错误:int() 以 10 为底的无效文字