Désactiver les messages d'erreur interpréteur [Résolu/Fermé]

Signaler
Messages postés
86
Date d'inscription
mercredi 14 août 2019
Statut
Membre
Dernière intervention
23 octobre 2020
-
Messages postés
86
Date d'inscription
mercredi 14 août 2019
Statut
Membre
Dernière intervention
23 octobre 2020
-
Bonjour !

Je travaille sur une application de mathématiques en ligne de commande sur l'interpréteur Python en mode interactif : mon script charge toutes les fonctions de mon applis, variables, etc...
L'utilisateur peut alors utiliser ces fonctions comme sur une calculette comme un programmeur Python !

Seul souci, j'aimerais désactiver les messages d'erreur, ou tout du moins, les changer pour que l'utilisateur y comprenne quelque chose, s'il n'est pas programmeur.
Par exemple, il utilise une vaiable qui n'existe pas, mon programme pourra lui dire quelle est son erreur plutôt qu'un :

>>> mlg
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'mlg' is not defined

Comment faire ?
Merci !

4 réponses

Bonjour, un seul mot : Exception

Donc à toi de gérer correctement via tes fonctions les arguments reçus en attrapant les erreurs avec des exceptions.
Messages postés
86
Date d'inscription
mercredi 14 août 2019
Statut
Membre
Dernière intervention
23 octobre 2020
1
Justement : c'est l'interpréteur Python qui gère les exceptions avec les variables comme dans mon exemple, comment puis-je gérer à sa place ce type d'exception ?
En recherchant, j'ai bien trouvé quelque chose qui puisse fonctioner, la fonction exec (), mais elle n'est pas adaptée à mon programme, car bon nombre de mes fonctions renvoient une valeur et exec () ne renvoie pas de valeur...
C'est bien dommage, car j'aurais pu ainsi gérer ces exceptions avec quelque chose de ce style :

# Les fonctions de mon programme...

while True:  # Boucle principale
    cmd = input (">>> ")

    result = 0 # On initialise result

    try:
        result = exec (cmd)
    
    except NameError:
       # Réagir à cette exception

    # Gestion de toutes les autres exceptions de la même façon...

    if result is not None:  # Car toutes les fonctions ne renvoient pas de résultat, il faut vérifier que exec () renvoie bien quelque chose
        print (result)

    # Et on continue à l'infini tant que l'utilisateur n'entre pas exit () ou quit ()


Peut-être qu'une autre fonction pourrait convenir ?
Merci !

[EDIT] : Je crois avoir trouvé un truc interessant du côté de la fonction eval () !
J'ai utilisé le même code que ci-dessus en remplaçant exec () par eval () et ça a l'air de fonctionner pour le moment !
Dites-moi si cela fait trop bricolage voire est dangereux !
Messages postés
12731
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 octobre 2020
708
bonjour, que fait ton script et que fait l'utilisateur? peux-tu donner un exemple?
si tu laisses l'utilisateur rentrer un programme python, je ne vois pas comment tu pourrais intervenir si son programme n'est pas correct.
Messages postés
86
Date d'inscription
mercredi 14 août 2019
Statut
Membre
Dernière intervention
23 octobre 2020
1
Dans mon programme, l'utilisateur peut utiliser des fonctions mathématiques de base, mais aussi certaines plus spécifiques telles que prime (x) qui indique si x est premier et bien d'autres encore.

Il peut égalemnt créer et gérer des objets comme des volumes, des vecteurs ou encore des polynômes.

Il fait tout comme s'il programmait, mais sans forcément le savoir.

Avancé ?
Au pire, vous pouvez toujours tester la dernière version stable en téléchargement sur mon site web, cela vous permettera de vous faire une meilleure idée en testant directement l'appli.
Bonne nuit !

[EDIT] : Je suis contraint de faire un mixte entre eval () et exec () : eval ne fonctionne pas pour créer les objets, je le fais donc avec exec (), tout le reste se fait avec eval ()