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 :

Comment gérer correctement une exception ?


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut Comment gérer correctement une exception ?
    Bonjour,

    Je débute avec Python (version 3.3.2) et j'ai besoin de votre aide.

    Voici le code que j'ai créé :
    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
     
    import math
     
    def change(value):
        return 0.017453292519943295 * value
     
    flag = False
     
    for num in range(101):
        for num2 in range(101):
            for num3 in range(101):
                try:
                    flag = (
                        math.log10(num3 - 3.0) + math.log10(num3 + 1.0) == math.log10(4.0 * num3 - 3.0)
                    ) and (
                        math.pow(2.0, num + 3.0) - math.sqrt(math.pow(2.0, num3 - 2.0 + 2.0 * num)) == 4.0 + 2.0 * math.pow(4.0, num / 2.0)
                    ) and (
                        math.sqrt(3.0) * math.pow(math.tan(2.0 * change(num2)), 2.0) - 4.0 * math.tan((num3 - 4.0) * change(num2)) == math.sqrt(3.0) * -1.0
                    )
                except:
                    flag = False
                else:
                    if flag:
                        print("Combinaison valide :", num, num2, num3)
    Je voudrais savoir si j'utilise correctement le try/except/else car je suis obligé de mettre le except avec une ligne dedans.
    Est-ce normal ?
    Existe-t-il une autre méthode plus propre ?

    Pouvez-vous me dire si ma variable flag est correctement initialisée car je n'ai pas réussi à mettre :

    Merci,
    ZiP

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 302
    Points : 6 782
    Points
    6 782
    Par défaut
    Salut,

    Si tu utilises un bloc try except c'est que tu penses que ces lignes de code pourraient échouer.

    En principe tu connais les raisons de l'échec et tu choisis le type d'exception appropriée, ValueError, TypeError etc afin de pouvoir assurer la poursuite du process tout en gérant l'erreur elle-même.

    Dans certains cas, peut-être le tien ici, peut importe l'erreur, elle n'est pas corrigeable et le process continuera selon une autre voie.

    Donc jusque là ton code est OK.

    Pour la variable référence flag, tu ne dois pas l'initialiser dans cet exemple, soit tout ce passe bien et flag réfère au résultat du bloc try except soit elle réfère False.

    Par contre, tu n'as pas besoin ici du else puisqu'il est suivit par la condition if flag: donc de toutes manières si l'opération avait levé une exception cette condition n'est pas remplie.

    Par contre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bool flag = False;
    Ça, c'était dans des langues très anciennes, je ne peux pas t'aider, mon grand père à brûlé toute sa doc lors de la dernière glaciation.


  3. #3
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonsoir,

    Merci pour ces précisions !

    J'ai par conséquent retiré l'initialisation du flag et le else :

    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
     
    import math
     
    def change(value):
        return 0.017453292519943295 * value
     
    for num in range(101):
        for num2 in range(101):
            for num3 in range(101):
                try:
                    flag = (
                        math.log10(num3 - 3.0) + math.log10(num3 + 1.0) == math.log10(4.0 * num3 - 3.0)
                    ) and (
                        math.pow(2.0, num + 3.0) - math.sqrt(math.pow(2.0, num3 - 2.0 + 2.0 * num)) == 4.0 + 2.0 * math.pow(4.0, num / 2.0)
                    ) and (
                        math.sqrt(3.0) * math.pow(math.tan(2.0 * change(num2)), 2.0) - 4.0 * math.tan((num3 - 4.0) * change(num2)) == math.sqrt(3.0) * -1.0
                    )
                except:
                    flag = False
                if flag:
                    print("Combinaison valide :", num, num2, num3)
    Merci,
    ZiP

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

Discussions similaires

  1. [TabItem] Comment gérer correctement les RoutedMessages sur un overrided ?
    Par ikeas dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 02/10/2008, 13h28
  2. Comment afficher correctement une interface complexe ?
    Par Pirokkk dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 04/04/2008, 13h31
  3. [C#] Comment gérer correctement mes requetes ?
    Par Jinroh77 dans le forum Accès aux données
    Réponses: 14
    Dernier message: 25/07/2006, 15h51
  4. Réponses: 4
    Dernier message: 06/06/2006, 16h18
  5. [.NET 2.0] Comment gérer correctement des sockets ?
    Par MattC dans le forum Framework .NET
    Réponses: 2
    Dernier message: 08/02/2006, 16h31

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