Pb exceptions Python

Fermé
Gvrt85 Messages postés 5 Date d'inscription mardi 27 octobre 2020 Statut Membre Dernière intervention 27 octobre 2020 - Modifié le 27 oct. 2020 à 16:47
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 - 27 oct. 2020 à 22:07
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 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 Ambassadeur 1 557
Modifié le 27 oct. 2020 à 17:00
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 mardi 27 octobre 2020 Statut Membre Dernière intervention 27 octobre 2020
27 oct. 2020 à 17:13
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 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557 > Gvrt85 Messages postés 5 Date d'inscription mardi 27 octobre 2020 Statut Membre Dernière intervention 27 octobre 2020
27 oct. 2020 à 17:19
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 mardi 27 octobre 2020 Statut Membre Dernière intervention 27 octobre 2020 > yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024
27 oct. 2020 à 17:23
try:
x = str(x)

N'est ce pas un test qui rejette les entiers?
0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557 > Gvrt85 Messages postés 5 Date d'inscription mardi 27 octobre 2020 Statut Membre Dernière intervention 27 octobre 2020
27 oct. 2020 à 17:28
as-tu essayé?
0
Gvrt85 Messages postés 5 Date d'inscription mardi 27 octobre 2020 Statut Membre Dernière intervention 27 octobre 2020 > yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024
27 oct. 2020 à 18:50
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