Python 2.7 try and except ValueError

前端 未结 3 1360
抹茶落季
抹茶落季 2021-02-07 07:33

I query user input which is expected to be an int by using int(raw_input(...))

However when the user doesn\'t enter an integer, i.e. just hits return, I get a ValueError

相关标签:
3条回答
  • 2021-02-07 07:41

    Is something like this what you're going for?

    def inputValue(inputMatrix, defaultValue, playerValue):
        while True:
            try:
                rowPos = int(raw_input("Please enter the row, 0 indexed."))
                colPos = int(raw_input("Please enter the column, 0 indexed."))
            except ValueError:
                continue
            if inputMatrix[rowPos][colPos] == defaultValue:
                inputMatrix[rowPos][colPos] = playerValue
                break
        return inputMatrix
    
    print inputValue([[0,0,0], [0,0,0], [0,0,0]], 0, 1)
    

    You were right to try and handle the exception, but you don't seem to understand how functions work... Calling inputValue from within inputValue is called recursion, and it's probably not what you want here.

    0 讨论(0)
  • 2021-02-07 07:48

    Instead of calling inputValue recursively, you need to replace raw_input with your own function with validation and retry. Something like this:

    def user_int(msg):
      try:
        return int(raw_input(msg))
      except ValueError:
        return user_int("Entered value is invalid, please try again")
    
    0 讨论(0)
  • 2021-02-07 07:59

    A quick and dirty solution is:

    parsed = False
    while not parsed:
        try:
            x = int(raw_input('Enter the value:'))
            parsed = True # we only get here if the previous line didn't throw an exception
        except ValueError:
            print 'Invalid value!'
    

    This will keep prompting the user for input until parsed is True which will only happen if there was no exception.

    0 讨论(0)
提交回复
热议问题