2010-02-11 13 views
12

Sto cercando di ottenere un utente per immettere un numero compreso tra 1 e 4. Ho il codice per verificare se il numero è corretto ma voglio che il codice giri più volte fino a quando i numeri sono corretti. Qualcuno sa come fare questo? Il codice è qui sotto:Ottenere una dichiarazione Try per andare in loop fino a ottenere il valore corretto

def Release(): 


    try: 
     print 'Please select one of the following?\nCompletion = 0\nRelease ID = 1\nVersion ID = 2\nBuild ID = 3\n' 
     a = int(input("Please select the type of release required: ")) 
     if a == 0: 
      files(a) 
     elif a == 1: 
      files(a) 
     elif a == 2: 
      files(a) 
     elif a == 3: 
      files(a) 
     else: 
      raise 'incorrect' 
    except 'incorrect':  
     print 'Try Again' 
    except: 
     print 'Error' 

Release() 

Sono anche ottenendo un errore circa l'eccezione ho inserito:

kill.py:20: DeprecationWarning: catching of string exceptions is deprecated 
    except 'incorrect': 
Error 

Grazie per qualsiasi aiuto eccezioni

+9

Questo è davvero un cattivo design; input utente errato qui non è davvero un'eccezione. – unwind

risposta

29
def files(a): 
    pass 

while True: 
    try: 
     i = int(input('Select: ')) 
     if i in range(4): 
      files(i) 
      break 
    except:  
     pass 

    print '\nIncorrect input, try again' 
+0

@jellybean - Grazie per questo. Questo lavoro è il migliore, tutte le altre risposte sono buone ma questo codice attira l'utente inserendo qualsiasi altra variabile errata. – chrissygormley

5

moderna Python sono classi; utilizzando raise 'incorrect', si utilizza una funzionalità di lingua deprecata denominata eccezioni stringa. La sezione Errors and Exceptions del tutorial Python sarebbe un buon punto di partenza con la gestione delle eccezioni di base in Python.

In generale, le eccezioni non sono comunque ideali per la situazione, un semplice ciclo while dovrebbe essere sufficiente. Le eccezioni dovrebbero essere riservate a situazioni eccezionali e l'input da parte degli utenti non è eccezionale, è previsto.

La versione basata su loop di Release sarebbe simile a questa:

def Release(): 
    a = None 
    while a not in (0, 1, 2, 3): 
     print 'Please select one of the following?\nCompletion = 0\nRelease ID = 1\nVersion ID = 2\nBuild ID = 3\n' 
     try: 
      a = int(input("Please select the type of release required: ")) 
     except ValueError: 
      pass # Could happen in face of bad user input 
    files(a) 

P.S. a è un nome variabile errato; probabilmente dovresti cambiarlo in chosen_option o qualcosa del genere.

4

Il tuo approccio sembra essere un modo molto prolisso per realizzare qualcosa di abbastanza semplice:

def Release() : 
    while True : 
     print 'Please select one of the following?\nCompletion = 0\nRelease ID = 1\nVersion ID = 2\nBuild ID = 3\n' 
     a = int(input("Please select the type of release required: ")) 
     if 0 <= a < 4 : 
      files(a) 
      break 
     else : 
      print('Try Again') 
3

Siete entrambi lancio e la cattura l'eccezione nello stesso semplice blocco di codice - questo non è proprio quello che fa eccezione la gestione è circa. Puoi farlo meglio uscendo da un loop o mantenendo una condizione. Es .:

def isNumberCorrect(x): 
    return x in range(4) 

def Release(): 
    num = None # incorrect 

    while not isNumberCorrect(num): 
     print 'Please select one of the following?\nCompletion = 0\nRelease ID = 1\nVersion ID = 2\nBuild ID = 3\n' 
     num_str = raw_input("Please select the type of release required: ") 

     try: 
      num = int(num_str) 
     except ValueError: 
      num = None 

     if not isNumberCorrect(num): 
      print 'Incorrect!' 

    # work with num here; it's guaranteed to be correct. 

if __name__ == '__main__': 
    try: 
    Release() 
    except: 
    print 'Error!' 

EDIT: errore Aggiunto il check-in int analisi.

2

Invece di usare le eccezioni si potrebbe fare qualcosa di simile:

... 
a = raw_input("Please select the type of release required:") 
while a not in ['0','1','2','3']: a = raw_input("Try again: ") 
files(int(a)) 
... 
+2

int() potrebbe generare un'eccezione per l'immissione di caratteri ... –

+0

È vero. Non utilizzabile come tale – Anssi

1
def Release(): 
    while 1: 
     print """Please select one of the following? 
       Completion = 0 
       Release ID = 1 
       Version ID = 2 
       Build ID = 3 
       Exit = 4 """    
     try: 
      a = int(raw_input("Please select the type of release required: ")) 
     except Exception,e: 
      print e 
     else: 
      if a==4: return 0 
      files(a) 
Problemi correlati