J'essaie d'amener un utilisateur à entrer un nombre compris entre 1 et 4. J'ai un code pour vérifier si le numéro est correct mais je veux que le code boucle plusieurs fois jusqu'à ce que les chiffres soient corrects. Est-ce que quelqu'un sait comment faire ça? Le code est ci-dessous:
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()
Je reçois également une erreur concernant l'exception que j'ai entrée:
kill.py:20: DeprecationWarning: catching of string exceptions is deprecated
except 'incorrect':
Error
Merci pour toute aide
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'
Modern Python sont des classes; en utilisant raise 'incorrect'
, vous utilisez une fonction de langage obsolète appelée exceptions de chaîne. La section Erreurs et exceptions du didacticiel Python serait un bon point de départ pour la gestion des exceptions de base en Python.
En général, les exceptions ne sont de toute façon pas idéales pour votre situation - une simple boucle while
devrait suffire. Des exceptions doivent être réservées pour des situations exceptionnelles, et une mauvaise entrée utilisateur n'est pas exceptionnelle, c'est normal.
La version en boucle de Release
ressemblerait à ceci:
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
est un mauvais nom de variable; vous devriez probablement le changer en chosen_option
ou quelque chose comme ça.
Votre approche semble être un moyen très long pour accomplir quelque chose d'assez simple:
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')
Vous lancez et interceptez l'exception dans le même bloc de code simple - ce n'est pas vraiment de cela qu'il s'agit. Vous pouvez mieux le faire soit en sortant d'une boucle ou en gardant une condition. Par exemple.:
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: Ajout d'une vérification d'erreur dans l'analyse syntaxique int.
Au lieu d'utiliser des exceptions, vous pouvez faire quelque chose comme ceci:
...
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))
...
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)