IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Exception Python qui ne bloque pas le code


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Décembre 2024
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Décembre 2024
    Messages : 8
    Par défaut Exception Python qui ne bloque pas le code
    Bonjour à tous,
    Je débute sur Python et ai créer un petit programme liste de courses avec des fonctions d'ajout, suppression etc d'éléments dans une liste. Tout fonctionne comme je le souhaite mais j'ai tout de même un message d'exception.
    Souhaitant que tout soit propre et conventionnel j'aimerai comprendre et debugger ceci.
    J'en appelle à votre aide et vous remercie par avance.

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    liste = []
     
    #Fonction ajouter un élément
    def ajouter():
        element_ajout = ""
        while element_ajout == "":
            element_ajout = input("Quel est le nom de l'élément à ajouter ? ")
        else:
            liste.append(element_ajout)
            print(f"L'élément {element_ajout} a bien été ajouté à la liste.")
            liste_courses()
     
    #Fonction supprimer un élément
    def supprimer():
        element_supprime = ""
        while element_supprime == "":
            element_supprime = input("Quel est le nom de l'élément à supprimer ? ")
        else:
            if element_supprime in liste:
                liste.remove(element_supprime)
                print(f"L'élément {element_supprime} a bien été supprimé de la liste.")
            else :
                print("Cet élément n'est pas dans la liste, voici les éléments de la liste :")
                for i in range(0, len(liste)) :
                    print(f"{i+1} - {liste[i]}")
        liste_courses()
     
    #Fonction afficher liste de courses
    def afficher():
        if liste == []:
            print("Votre liste est vide.")
     
        for i in range(0, len(liste)) :
            print("Voici le contenu de votre liste de courses: ")
            print(f"{i+1} - {liste[i]}")
        liste_courses()
     
    #Fonction vider la liste
    def vider():
        vide = ""
        while vide == "":
            vide = input("Voulez-vous supprimer tous les éléments de la liste ? o/n ")
        if vide == "o":
            del liste[0:len(liste)]
            print("La liste a bien été vidée.")
            liste_courses()
        else:
            liste_courses()
     
    #Fonction quitter le programme
    def sortir():
        sortir = ""
        while sortir == "":
            sortir = input("Voulez-vous vraiment quitter le programme ? o/n ")
            if sortir == "o":
                break
            print("A bientôt !")
            liste_courses()
        else:
            liste_courses()
     
    #Fonction du choix de l'action
    def liste_courses():
        print("")
        print("Choisissez parmi les 5 options suivantes: ")
        print("1: Ajouter un élément à la liste")
        print("2: Supprimer un élément de la liste")
        print("3: Afficher les éléments de la liste")
        print("4: Vider la liste")
        print("5: Quitter")
     
        choix = ""
        while choix == "":
            choix = input("Quel est votre choix ? ")
     
        if choix == "1":
            ajouter()
     
        elif choix == "2":
            supprimer()
     
        elif choix == "3":
            afficher()
     
        elif choix =="4":
            vider()
     
        elif choix =="5":
            sortir()
    liste_courses()
    Et juste avant que cela se lance si je scrolle l'invité de commande je constate cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Quel est le nom de l'élément à ajouter ? Traceback (most recent call last):
      File "c:\Users\Bob\Desktop\Python_exos\python_test.py", line 92, in <module>
        liste_courses()
      File "c:\Users\Bob\Desktop\Python_exos\python_test.py", line 79, in liste_courses
        ajouter()
      File "c:\Users\Bob\Desktop\Python_exos\python_test.py", line 9, in ajouter
        element_ajout = input("Quel est le nom de l'élément à ajouter ? ")
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    KeyboardInterrupt
    Cependant le code se lance ensuite et fonctionne parfaitement.

    Merci beaucoup.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 726
    Par défaut
    Salut,

    Vous lancez le programme depuis/dans quel environnement?
    Ce n'est supposé fonctionner que lancé dans un terminal (crée via cmd.exe sous Windows).

    note: ça ne bloque pas le programme mais ça le termine... avec une sortie en erreur.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Décembre 2024
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Décembre 2024
    Messages : 8
    Par défaut
    Bonjour, merci pour votre réponse.

    Je lance via Visual Studio Code sous windows.

    Ce que je ne comprends pas c'est qu'il se lance et le programme fonctionne. C'est seulement en scrollant que je vois l'erreur. Je ne sais pas si c'est clair.

    Lorsque je run le code en un seul run cela m'affiche la photo ci-dessous, comme si il se lançait deux fois avec une deuxième fois fonctionnelle.

    Nom : Sans titre.jpg
Affichages : 137
Taille : 179,3 Ko

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 726
    Par défaut
    Salut,

    Je ne veux pas savoir le pourquoi du comment.

    Vous lancez le programme dans un environnement normal (cmd.exe, par exemple). Si vous ne reproduisez pas le problème, vous aurez expérimenté que les IDE, c'est bien mais les environnements d'exécutions qu'ils proposent ne réagissent pas comme les environnements normaux d'exécution.

    Si le problème ne se reproduit pas dans un environnement normal, vous pouvez vivre avec ou aller demander des explications a ceux qui ont conçu l'IDE.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Décembre 2024
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Décembre 2024
    Messages : 8
    Par défaut
    Cela fonctionne je vous remercie.

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    Perso, le code fonctionne très bien sur VSCode mais sur Linux.

    Donc peut-être un problème IDE + OS...

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Décembre 2024
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Décembre 2024
    Messages : 8
    Par défaut
    Je n'avais simplement pas pensé essayer un autre IDE. Sous Pycharm aucun problème.

    Merci à tous je clos le sujet.

  8. #8
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    bonjour
    Citation Envoyé par Power_bob Voir le message
    comme si il se lançait deux fois avec une deuxième fois fonctionnelle
    Attention ton programme a une très mauvaise structure ! il faut donc tout réécrire
    il est récursif
    ex : liste_courses() appelle ajouter() qui appelle liste_courses() qui appelle ... qui appelle liste_courses() qui ...

    note python:
    si une variable est vide on utilise uniquement not.

    while element == "" => while not element:-
    if liste == []: => if not liste:

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 726
    Par défaut
    Citation Envoyé par papajoker Voir le message
    Attention ton programme a une très mauvaise structure ! il faut donc tout réécrire
    il est récursif
    ex : liste_courses() appelle ajouter() qui appelle liste_courses() qui appelle ... qui appelle liste_courses() qui ...
    oui mais ca boucle au rythme des entrées utilisateurs i.e. à raison de 1 à 2 s. par itération. On aura un problème au bout de 1000 a 2000 secondes i.e. 15 a 30mns de saisie.

    Il n'est pas utile de tout ré-écrire, seulement quelques lignes ou on modifie dans un premier temps la fin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #Fonction du choix de l'action
    def liste_courses():
        print("")
        print("Choisissez parmi les 5 options suivantes: ")
        ....
     
        elif choix =="5":
            sortir()
    liste_courses()
    ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #Fonction du choix de l'action
    def liste_courses():
        pass
    while True:
        print("")
        print("Choisissez parmi les 5 options suivantes: ")
        ....
     
        elif choix =="5":
            sortir()
            break
    #liste_courses()
    puis on nettoie liste de courses.

    note: il y aurait plein de remarques à faire sur ce code. Pour moi, s'il fonctionne c'est déjà bien. Pour le reste, on va se poser des questions lorsqu'il faudra se fera piéger à la relecture de sa prose. C'est a ce moment là qu'on s'appliquera à écrire moins de lignes, être plus concis.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #Fonction quitter le programme
    def sortir():
        sortir = ""
        while sortir == "":
            sortir = input("Voulez-vous vraiment quitter le programme ? o/n ")
            if sortir == "o":
                break
            print("A bientôt !")
            liste_courses()
        else:
            liste_courses()
    tout ce bavardage se résume à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #Fonction quitter le programme
    def sortir():
        while True:
            s = input("Voulez-vous vraiment quitter le programme ? o/n ")
            if s.lower() == "o":
                break
            print("A bientôt !")
     
        #liste_courses()
    et ce devrait être "bug compatible" avec le code initial.

    Citation Envoyé par Power_bob Voir le message
    Je n'avais simplement pas pensé essayer un autre IDE. Sous Pycharm aucun problème.

    Merci à tous je clos le sujet.
    Un autre IDE aura aussi ses soucis puisqu'il exécutera les programmes dans un environnement spécifique. Ca marchera dans la plupart des cas mais en cas de problème, il faut regarder ce qu'il se passe dans environnement normal avant de se prendre le chou.


    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Décembre 2024
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Décembre 2024
    Messages : 8
    Par défaut
    Merci beaucoup je vais bien regarder celà demain.

    Je rappelle que je suis débutant soit une semaine de Python donc je vais bien bosser sur vos critiques.
    C'est pour cela que mon code est probablement mauvais.

    Merci beaucoup

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 726
    Par défaut
    Citation Envoyé par Power_bob Voir le message
    Je rappelle que je suis débutant soit une semaine de Python donc je vais bien bosser sur vos critiques.
    C'est pour cela que mon code est probablement mauvais.
    Votre code n'est pas "mauvais" puisqu'il fonctionne (a peu près), mais il est certainement perfectible (c'est à ça qu'on bosse quand on débute).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Décembre 2024
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Décembre 2024
    Messages : 8
    Par défaut
    Merci beaucoup à vous deux je bosse sur ce que vous m'avez conseillé.

    Bonne journée à vous.

  13. #13
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Power_bob Voir le message
    C'est pour cela que mon code est probablement mauvais.
    En fait tu as conçu ton code comme un train d'actions. A qui appelle B qui appelle C qui appelle A.
    Le souci, c'est que cela "empile" les actions (si A appelle B, il s'attend à un retour de B mais si B appelle C entre temps alors il attend lui-même un retour de C et etc).

    Il faut penser "tour de contrôle". Une fonction de base organisatrice (exemple ton menu de choix ) et chaque action va appeler la fonction dédiée. Ajouter un élément => appel de ajout qui ne s'occupe que de l'ajout et rien d'autre ; puis une fois l'ajout terminé, cela revient à la tour qui peut faire autre chose.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  14. #14
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 726
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Il faut penser "tour de contrôle". Une fonction de base organisatrice (exemple ton menu de choix ) et chaque action va appeler la fonction dédiée.
    Il faut surtout que les notions/concepts de boucles et de fonctions murissent... Ce qui suppose avoir pris le temps de "penser avec" i.e. prendre le temps de les connecter avec des abstractions existantes (ou a créer) dans son propre cerveau qui permettront de...

    tour de contrôle, hiérarchie, client/serveur, appelé/appelant, rôle et responsabilité,... suivant le cas des images seront plus appropriées que d'autres. Mais la clé sera dans les questions qu'on se pose (et dans les solutions qu'on va trouver) en faisant des exercices.

    C'est ce qui fait qu'après quelques semaines d'apprentissage, si on revoit des codes qu'on a écrit au début, on verra mieux combien ils étaient brouillons (ce qui est normal).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Décembre 2024
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Décembre 2024
    Messages : 8
    Par défaut
    Je comprends bien merci. J'ai fait un autre exercice ou j'ai semble t'il évité cet écueil. Je vais revenir sur ce code prochainement pour essayer de l'optimiser lorsque j'aurai fait plus d'exercices.

    Merci infiniment

  16. #16
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 726
    Par défaut
    Salut,

    Vous pouvez aussi ouvrir un tuto qui propose des exercices corrigés comme le Swinnen.
    Il n'est pas toujours facile de résister à la tentation de se jeter sur la solution plutôt que de passer du temps à faire l'exercice mais lorsqu'on y arrive, ça permet aussi de se poser de bonnes questions sur ce qu'on a écrit.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Décembre 2024
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Décembre 2024
    Messages : 8
    Par défaut
    Merci pour la référence. Ce que j'aime en programmation est clairement le processus de recherche, le chemin et non la destination donc je prendrai plaisir à étudier le livre. Je viens de le télécharger je vous remercie encore une fois.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Temporisation qui ne bloque pas l'application
    Par Zorgloub dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/02/2008, 16h55
  2. alert() qui ne bloque pas le chargement de la page ?
    Par Cofondinde dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/08/2007, 10h31
  3. recvfrom qui ne bloque pas ?
    Par innosang dans le forum Réseau
    Réponses: 1
    Dernier message: 21/06/2007, 11h11
  4. Problème de fenêtre modal qui ne stoppe pas le code en arrière plan
    Par Sebcaen dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 25/09/2006, 13h43
  5. Réponses: 8
    Dernier message: 25/11/2005, 18h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo