2010-02-11 6 views
12

Ich versuche, einen Benutzer eine Nummer zwischen 1 und 4 eingeben. Ich habe Code, um zu überprüfen, ob die Nummer korrekt ist, aber ich möchte den Code mehrmals durchlaufen bis die Zahlen stimmen. Weiß jemand, wie man das macht? Der Code ist unten:Holen Sie sich eine Try-Anweisung, um den richtigen Wert zu erhalten

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() 

ich auch einen Fehler über die Ausnahme bekomme ich eingegeben haben:

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

Vielen Dank für jede Hilfe

+9

Dies ist ein wirklich schlechtes Design; falsche Benutzereingaben sind hier nicht wirklich eine Ausnahme. – unwind

Antwort

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 - Danke dafür. Diese Arbeit ist die beste, alle anderen Antworten sind gut, aber dieser Code fängt den Benutzer ein, der eine andere falsche Variable eingibt. – chrissygormley

5

Moderne Python Ausnahmen sind Klassen; Unter Verwendung von raise 'incorrect' verwenden Sie eine veraltete Sprachfunktion namens string exceptions. Der Abschnitt Errors and Exceptions des Python-Lernprogramms wäre ein guter Ausgangspunkt, um mit der grundlegenden Ausnahmebehandlung in Python zu beginnen.

Im Allgemeinen sind Ausnahmen für Ihre Situation sowieso nicht ideal - eine einfache while Schleife sollte ausreichen. Ausnahmen sollten für Ausnahmesituationen reserviert werden, und schlechte Benutzereingaben sind nicht außergewöhnlich, wie erwartet.

Die Loop-basierte Version von Release würde wie folgt aussehen:

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 ist ein falscher Variablenname; Sie sollten es wahrscheinlich zu chosen_option oder etwas in der Art ändern.

4

Ihr Ansatz scheint ein sehr langwieriger Weg, um etwas ziemlich einfach zu erreichen:

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

Sie beiden Würfe sind und die Ausnahme in dem gleichen einfachen Code-Block zu kontrollieren - das ist wirklich nicht das, was Ausnahme Handhabung geht um. Sie können es besser machen, indem Sie entweder aus einer Schleife ausbrechen oder eine Bedingung beibehalten. Z.B .:

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: hinzugefügt Fehler in der int-Analyse überprüft.

2

Statt Ausnahmen verwenden Sie so etwas wie dies tun könnte:

... 
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() könnte eine Ausnahme bei der Zeicheneingabe auslösen ... –

+0

Das stimmt. Nicht als solche verwendbar – 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) 
Verwandte Themen