Désactiver les messages d'erreur interpréteur

Résolu/Fermé
MemeTech Messages postés 90 Date d'inscription mercredi 14 août 2019 Statut Membre Dernière intervention 7 janvier 2021 - 16 août 2019 à 19:24
MemeTech Messages postés 90 Date d'inscription mercredi 14 août 2019 Statut Membre Dernière intervention 7 janvier 2021 - 17 août 2019 à 22:58
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 !
A voir également:

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.
0
MemeTech Messages postés 90 Date d'inscription mercredi 14 août 2019 Statut Membre Dernière intervention 7 janvier 2021 1
Modifié le 17 août 2019 à 22:48
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 !
0
yg_be Messages postés 23331 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 novembre 2024 Ambassadeur 1 551
Modifié le 17 août 2019 à 22:48
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.
0
MemeTech Messages postés 90 Date d'inscription mercredi 14 août 2019 Statut Membre Dernière intervention 7 janvier 2021 1
Modifié le 17 août 2019 à 23:03
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 ()
0