2011-02-17 3 views
10

를 제외하고 내가 INT (raw_input을 (...))를 사용하여 INT 될 것으로 예상된다 사용자 입력을 쿼리파이썬 2.7의 시도와 ValueError를

, 즉 단지 수익을 명중 , 나는 ValueError를 얻는다.

def inputValue(inputMatrix, rangeRows, rangeCols, defaultValue, playerValue): 
    rowPos = int(raw_input("Please enter the row, 0 indexed.")) 
    colPos = int(raw_input("Please enter the column, 0 indexed.")) 
    while True: 
     #Test if valid row col position and position does not have default value 
     if rangeRows.count(rowPos) == 1 and rangeCols.count(colPos) == 1 and inputMatrix[rowPos][colPos] == defaultValue: 
      inputMatrix[rowPos][colPos] = playerValue 
      break 
     else: 
      print "Either the RowCol Position doesn't exist or it is already filled in." 
      rowPos = int(raw_input("Please enter the row, 0 indexed.")) 
      colPos = int(raw_input("Please enter the column, 0 indexed.")) 
    return inputMatrix 

나는 똑똑하고() 다시 inputValue의 전화 후 시도하고 ValueError를 잡을를 제외하고, 사용자에게 경고를 인쇄하여 사용했습니다.

def inputValue(inputMatrix, rangeRows, rangeCols, defaultValue, playerValue): 
    try: 
     rowPos = int(raw_input("Please enter the row, 0 indexed.")) 
    except ValueError: 
     print "Please enter a valid input." 
     inputValue(inputMatrix, rangeRows, rangeCols, defaultValue, playerValue) 
    try: 
     colPos = int(raw_input("Please enter the column, 0 indexed.")) 
    except ValueError: 
     print "Please enter a valid input." 
     inputValue(inputMatrix, rangeRows, rangeCols, defaultValue, playerValue) 
+2

어딘가에 질문이 있습니까? –

답변

21

:

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!' 

parsed 때까지 사용자에게 입력하라는 메시지가 계속됩니다도 예외는 없었다 경우에만 발생합니다 True입니다.

1

은 같은 것입니다 : 사용자가 쿼리로 돌아갑니다하지만 사용자가 제대로 다음 정수 아래

를 입력 할 때 이상 떨어지는 시도와를 제외하고 수정 된 코드의 일부인 경우 그 다음 작동 이게 네가하려는거야?

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) 

당신은 시도하고 예외를 처리 할 옳았다,하지만 당신은 기능이 작동 방법을 이해하지 못하는 것 같습니다 ... 재귀라고 inputValue의 내에서 inputValue의 호출, 그리고 당신이 여기에 원하는 아마 아니다.

2

inputValue을 반복적으로 호출하는 대신 raw_input을 유효성 검사 및 재 시도로 자신의 기능으로 바꿔야합니다. 이런 식으로 뭔가 : 신속하고 더러운 솔루션입니다

def user_int(msg): 
    try: 
    return int(raw_input(msg)) 
    except ValueError: 
    return user_int("Entered value is invalid, please try again")