Forum Programmation.python Classe et exceptions: return, stderr, sys.exit, UserWarning, etc

Posté par (page perso) .
Tags : aucun
3
5
jan.
2012

Bonjour à tous,

Excusez-moi d'avance pour mon incompétence, je suis un amateur.

Je travaille sur une classe destinée à être utilisée par plusieurs petits scripts (un script en ligne de commande interactif, un autre non interactif, et j'espère un jour une interface graphique). Je ne sais pas comment gérer proprement les exceptions. Ma classe est à même de reconnaître des erreurs de syntaxe qui empêchent l'exécution normale de certaines de ses fonctions. J'aimerais que ces fonctions puissent indiquer au script qui les appelle qu'elles ne peuvent se poursuivre normalement, sans obliger le script à devoir procéder à une nouvelle instanciation de la classe. Par exemple:

class maclasse:
    ...
    def mafonction(self):
        if something:
            quitte la fonction mais pas la classe et envoie un signal d'erreur et un message sur stderr
        continue l'exécution normalement

  • un emboitement de if...else ne me convient pas car il peut y avoir plusieurs exceptions à gérer avant l'exécution du contenu de la fonction (ce qui devient illisible avec l'indentation), et surtout parce que je veux que le script qui appelle ma classe sache qu'une exception a été rencontrée.
  • sys.exit ne me convient pas car cela m'oblige à instancier une nouvelle fois la classe, ce qui ne fait pas sens pour le genre d'erreur rencontrée (erreurs de syntaxes humaines).
  • Faut-il utiliser "raise UserWarning()" dans la classe et "try ... except" dans les scripts qui appellent la classe? Comment dans ce cas récupérer le message d'erreur?
  • Faut-il utiliser une combinaison de print() et return?
  • Faut-il utiliser une combinaison de sys.stderr.write() et return?

J'imagine qu'il y a une façon de faire pythonesque propre et correcte pour gérer ce genre de situation, un éclaircissement de votre part m'aiderait beaucoup.

Merci d'avance!

  • # Utiliser les exceptions

    Posté par . Évalué à 2.

    Surtout, ne pas "bricoler". Ta définition du problème correspond à des exceptions, donc il faut les utiliser.

    Il est possible de définir tes propres exceptions.

    Concrètement, tu peux mettre les arguments que tu veux au constructeur, ce qui te permet de transmettre, notamment, le message.

    • [^] # Re: Utiliser les exceptions

      Posté par (page perso) . Évalué à 1.

      Si j'ai bien compris:

      • Dans le fichier contenant ma classe, je définis une classe d'exception, par exemple Myerror.
      • Dans la fonction devant gérer les exceptions, j'introduis une ligne "raise Myerror('texte d'erreur')".
      • Dans le script qui appelle ma classe, j'utilise le couple "try...except Myerror as...", et je gère l'exception comme cela me convient.

      J'ai bon?

      • [^] # Re: Utiliser les exceptions

        Posté par . Évalué à 2.

        Oui. Vraisemblablement c'est suffisant pour ton cas.

        Dans le cas idéal, il est judicieux d'utiliser les built-in exceptions lorsque c'est possible, et pour les autres de définir plusieurs classes d'exceptions (c'est plus facile de choisir le traitement à réserver à chaque exception si on a un bloc except pour chaque type d'exception.)

        • [^] # Re: Utiliser les exceptions

          Posté par (page perso) . Évalué à 3.

          Je comprends le principe. Il faut que j'approfondisse la documentation de Python à ce sujet, mais je devrais pouvoir m'en sortir tout seul maintenant.

          C'est un vrai plaisir ce langage de programmation!

          Merci beaucoup!

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.