Pb exceptions Python

Gvrt85 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je suis débutant et quelque chose doit surement m'échapper à propos du codage des exceptions.

Je souhaite faire compléter une liste de mots de huit lettres ou moins par l'utilisateur. Pour cela j'utilise la fonction input et souhaite lever les exceptions au cas où l'utilisateur ne rentre pas un mot mais des chiffres ou bien un mot supérieur à 8 lettres.

Le problème que je rencontre est que quoiqu'il arrive (exceptions ou non) la fonction input s’exécute 2 fois et seul la seconde fois peut entrer dans ma liste si elle répond aux critères. Autant dire un résultat hasardeux. J'ai beaucoup cherché sur le web sans trouver quelle grossière erreur je fais dans mon codage.

Voici mon code:

#Création de la liste
word_list = ["anaconda", "girafe", "rouge", "vert", "jaune"]

#Création de la fonction pour ajouter des mots dans la liste
def add_word():
    x = None
    while x == None:
        try:
            x = str(input("Veuillez entrer un mot de huit lettres ou moins svp :) -->"))
            assert len(x) <= 8
        except ValueError:
            print("Un mot innoncent pas un nombre!")
            x = None
        except AssertionError:
            x = None
        print("Veuillez entrer un mot de huit lettres ou moins pls")
    return x

add_word()
word_list.append(add_word())

1 réponse

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour,
tu n'as pas précisé "python" comme langage quand tu as utilisé les balises de code.
es-tu certain d'avoir correctement aligné le second print?

je pense que quelque chose t'échappe dans l'appel des fonctions.

ton observation "quoiqu'il arrive (exceptions ou non) la fonction input s’exécute 2 fois et seul la seconde fois peut entrer dans ma liste si elle répond aux critères" est très correcte.

le code fait précisément cela, et c'est ce que tu lui demandes de faire. regarde bien ce que tu as écrit.
0
Gvrt85 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour, merci pour ta réponse.

Si je comprends bien, je dois effacer la ligne qui appel la fonction seul pour au final l appeler uniquement au moment de la écriture dans la liste?

Ce que je ne saisi pas, c'est pourquoi mes exceptions ne s applique jamais... Entrer un chiffre ne gêne pas le programme pourtant la condition est saisie et fait appel à une erreur classique.

Je me remets sur le code de suite mais j'ai toujours le sentiment que quelque chose de évident m echappe.
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > Gvrt85 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
il n'y a pas de raison d'appeller deux fois la fonction.
moi je ferais ainsi, cela me semble plus facile à comprendre:
nouveaumot=add_word()
word_list.append(nouveaumot)


je ne comprends pas ta phrase "Entrer un chiffre ne gêne pas le programme pourtant la condition est saisie": quelle condition?
0
Gvrt85 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
try:
x = str(x)

N'est ce pas un test qui rejette les entiers?
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > Gvrt85 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
as-tu essayé?
0
Gvrt85 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
Effectivement c'est la partie déconnante de mon code...

J'ai tenu compte des conseils précédemment postés et tout fonctionne excepté ceci.

Dans un exercice précédent j'ai utiliser le code

try:
    x = int(x)


pour pouvoir rejeter les entiers, je pensais obtenir l'effet inverse en utilisant le code avec str(x), mais visiblement je dois réfléchir autrement
0