我在使用 try-except 块验证输入时遇到错误

I am getting errors from using try-except block to validate input

我想使用 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

任务可以分为两个步骤:

  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!")