Je crée une fonction qui reçoit un nombre entre 1 et 5 (échelle de Likert), d'une question. Lorsque l'utilisateur saisit une mauvaise int, ma boucle est ok, la question se répète. Mais je veux que la question de répéter si l'utilisateur entrait également une chaîne. Mais dans ce cas, le programme bloque "ValueError: littéral non valide pour int () avec base 10"
3 Réponses :
Vous lancez l vers INT avant de vérifier son type. Donc, lorsque L est une chaîne, votre programme essaie de le jeter à INT et il se bloque. Vous devez effectuer des opérations numériques uniquement lorsque vous êtes sûr que L n'est pas une chaîne. La solution est soit à utiliser Essayer de prendre et de le gérer avec une instruction IF. P>
Utiliser Vous n'avez pas besoin int () code> retourne toujours un entier, donc
type (l) == int code> sera toujours vrai. Si l'utilisateur tape quelque chose qui n'est pas un entier actif,
int () code> signalera une erreur.
Essayez / sauf code> pour gérer l'erreur si l'utilisateur entre quelque chose qui n'est pas un entier. p>
elif code>, car la condition est exactement l'opposé du
si code> condition; Utilisez
sinon code>. Vous n'avez pas non plus besoin
Continuer code>, puisqu'il est à la fin de la boucle et qu'il va continuer de continuer quand même. P> p>
Merci ! Je regarde des tutoriels de YouTube, et aucun d'entre eux n'est arrivé à cette partie (essayer / sauf) encore, mais cela a vraiment aidé!
C'est un sujet relativement avancé, vous n'êtes pas susceptible de le voir dans des tutoriels débutants.
au lieu d'essayer de résumer l'entrée comme int code> à droite de la batte, faites-le à la place:
def likert():
while True:
L = input()
if L.isalpha:
#if input is string
print('\033[031mError [1 to 5] only\033[m')
continue
elif L.isdigit:
#if input is int
if 1 <= L <= 5:
#if input is within range
return L
else:
#if input is out of range
print('\033[031mError [1 to 5] only\033[m')
continue
Utilisez un
Essayez: ... Sauf ValueError: ... Code> Pour attraper l'exception et la gérer.
Exécutions de traitement