【问题标题】:I am getting errors from using try-except block to validate input我在使用 try-except 块验证输入时遇到错误
【发布时间】:2021-05-06 19:11:32
【问题描述】:

我想使用 try-except 代码块来通知用户不要插入 float 类型的值,而是插入 整数。下面的代码不会引发错误,而是会关闭。 我猜它们是 try-except 块上的逻辑错误。

userGuess = int(userGuess)
import random

MAX_GUESSES = 5  # max number of guesses allowed

MAX_RANGE = 20  # highest possible number

# show introductionpygame
print("welcome to my franchise guess number game")
print("guess any number between 1 and", MAX_RANGE)
print("you will have a range from", MAX_GUESSES, "guesses")

def playOneRound():
    # choose random target
    target = random.randrange(1, MAX_RANGE + 1)

    # guess counter
    guessCounter = 0

    # loop fovever
    while True:
        userGuess = input("take a guess:")

         #check for potential errors
         try:
             userGuess = int(userGuess)
         except: 
               print("sorry, you are only allowed to enter integers thanks!")



    # increment guess counter
    guessCounter = guessCounter + 1

    # if user's guess is correct, congratulate user, we're done
    if userGuess == target:
        print("you got it la")
        print("it only took you", guessCounter, "guess(es)")
        break
    elif userGuess < target:
        print("try again, your guess is too low.")
    else:
        print(" your guess was too high")

    # if reached max guesses, tell answer correct answer, were done
    if guessCounter == MAX_GUESSES:
        print(" you didnt get it in ", MAX_GUESSES, "guesses")
        print("the number was", target)
        break

    print("Thanks for playing ")

 # main code

 while True:
     playOneRound()  # call a function to play one round of the game
     goAgain = input("play again?(press ENTER to continue, or q to quit ):")
     if goAgain == "q":
         break

【问题讨论】:

  • userGuess 是浮点数(例如3.14)时执行int(userGuess) 会将浮点数转换为整数,并且不会抛出任何错误。
  • 如果您正在寻找特定的调试帮助,您应该说明您看到的行为以及它与您希望看到的不同之处。
  • 嗨@Thesonter,当你运行你的程序时会发生什么?
  • 总是将完整的错误消息(从单词“Traceback”开始)作为文本(不是截图,不是链接到外部门户)有问题(不是评论)。还有其他有用的信息。

标签: python loops random try-except


【解决方案1】:

任务可以分为两个步骤:

  1. 检查输入字符串是否可以转换为数字
  2. 检查此数字是否为整数
while True:
    userGuess = input("take a guess: ")

    try:
        userGuess = float(userGuess)   # stuff like "asdf", "33ff" will raise a ValueError
        if userGuess.is_integer():     # this is False for 34.2
            userGuess = int(userGuess)
            break                      # an integer is found, leave the while loop
    except ValueError:
        pass                           # just try again

    print("sorry, you are only allowed to enter integers thanks!")

【讨论】:

  • @Thesonter “它没有用”是什么意思?有错误信息吗?如果是,是哪一个?
  • @Thesonter 我只检查了字符串到整数的转换。您的代码可能还有其他问题,例如一些错误的缩进。
  • 谢谢,可能会。我还在努力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 2014-01-22
相关资源
最近更新 更多