Partage
  • Partager sur Facebook
  • Partager sur Twitter

Python exception

    14 novembre 2018 à 17:13:45

    Bonjour,

    Je cherche à comprendre le fonctionnement de try/except

    Si je rentre un chiffre >1 , 5 par exemple je souhaite avoir le message " Vous n'avez pas rentrer un nombre entre 0 et 1" or ça ne marche pas.

    score = input("Enter Score: ")
    score = float(score)
    try:
        val = score
        0 <= val <= 1.0
    except:
        print("Vous n'avez pas rentrer un nombre entre 0 et 1")
        quit()
    
    if score >= 0.9:
       print("A") 
        
    elif score >= 0.9:
        print("A")
    elif score >= 0.8:
        print("B")
    elif score >= 0.7:
        print("C")
    elif score >= 0.6:
        print("D")
    else:
        print("F")
    


    • Partager sur Facebook
    • Partager sur Twitter
      14 novembre 2018 à 18:07:12

      Pourquoi try except ?

      Il y a tellement d'erreurs si peu de lignes que je préfère donner la correction tout de suite,

      score = float(input("Enter Score: "))
      if not 0 <= score <= 1.0:
          print("Vous n'avez pas rentrer un nombre entre 0 et 1")

      C'est la partie "bon sens" qui flanche et non "syntaxique"...

      • Partager sur Facebook
      • Partager sur Twitter

      Bonne journée...

        14 novembre 2018 à 18:41:09

        Pour ajouter un peu de précision sur try / except, même si c'est vrai que c'est inutile dans ce contexte :

        Pour entrer dans le bloc except, et donc capturer une exception, il faut lever une exception, ça se fait avec raise. Comparer des nombres, ça ne lève pas d'exception, ça renvoie juste un booléen (True ou False).

        Si tu veux capturer une exception, tu peux faire une division par zéro dans le bloc try par exemple, ça c'est une opération qui lève une exception. Ou alors tu peux directement utiliser raise.

        -
        Edité par LoupSolitaire 14 novembre 2018 à 18:42:54

        • Partager sur Facebook
        • Partager sur Twitter

        Blond, bouclé, toujours le sourire aux lèvres...

          14 novembre 2018 à 21:52:40

          Merci je pensais qu'on pouvait lever une exception avec un boolèen
          • Partager sur Facebook
          • Partager sur Twitter
            17 novembre 2018 à 10:06:30

            JlCro a écrit: > Merci je pensais qu'on pouvait lever une exception avec un boolèen

            Heureusement que non, ça voudrait dire que toute condition qui s'évalue à False lèverait une exception. Ce serait difficile de faire des if.

            • Partager sur Facebook
            • Partager sur Twitter
              17 novembre 2018 à 13:27:44

              Fredo54 a écrit:

              Pourquoi try except ?

              Il y a tellement d'erreurs si peu de lignes que je préfère donner la correction tout de suite,

              score = float(input("Enter Score: "))
              if not 0 <= score <= 1.0:
                  print("Vous n'avez pas rentrer un nombre entre 0 et 1")

              Je viens d'essayer ton programme, j'ai eu un message d'erreur :

              ValueError: could not convert string to float: 'e'
              

              Comme quoi utiliser une exception dans ce contexte ne me semble pas si bête.

              Dans un programme récent, pour gérer un menu allant de 0 à n, j'ai écrit ce bout de programme :

              # Saisie d'un nombre entre 0 et n (0 active le "undo").
              while True :
                  choix = input("votre choix > ")
                  try :
                      rep = int(choix)
                  except :    # rep n'existe pas
                      print("Erreur de saisie")
                  else :      # rep est un entier, est-il entre 0 et n ?
                      if 0 <= rep <= n :
                          break
                      else :
                          print("Erreur de saisie")
              

              JlCro : tu as vu, c'est la conversion en nombre qui va dans le bloc 'try', car c'est elle qui peut provoquer une exception (par exemple si l'utilisateur fait une faute de frappe et tape une lettre).

              (Comme je débute, ce n'est sûrement pas parfait. Par exemple je sais que, plutôt qu'afficher le message d'erreur, il faudrait appeler 'raise', mais je ne maîtrise pas encore...)

              -
              Edité par robun 17 novembre 2018 à 13:32:01

              • Partager sur Facebook
              • Partager sur Twitter
                17 novembre 2018 à 14:25:00

                robun a écrit:

                Fredo54 a écrit:

                Pourquoi try except ?

                Il y a tellement d'erreurs si peu de lignes que je préfère donner la correction tout de suite,

                score = float(input("Enter Score: "))
                if not 0 <= score <= 1.0:
                    print("Vous n'avez pas rentrer un nombre entre 0 et 1")

                Je viens d'essayer ton programme, j'ai eu un message d'erreur :

                ValueError: could not convert string to float: 'e'
                

                Comme quoi utiliser une exception dans ce contexte ne me semble pas si bête.

                Dans un programme récent, pour gérer un menu allant de 0 à n, j'ai écrit ce bout de programme :

                # Saisie d'un nombre entre 0 et n (0 active le "undo").
                while True :
                    choix = input("votre choix > ")
                    try :
                        rep = int(choix)
                    except :    # rep n'existe pas
                        print("Erreur de saisie")
                    else :      # rep est un entier, est-il entre 0 et n ?
                        if 0 <= rep <= n :
                            break
                        else :
                            print("Erreur de saisie")
                

                JlCro : tu as vu, c'est la conversion en nombre qui va dans le bloc 'try', car c'est elle qui peut provoquer une exception (par exemple si l'utilisateur fait une faute de frappe et tape une lettre).

                (Comme je débute, ce n'est sûrement pas parfait. Par exemple je sais que, plutôt qu'afficher le message d'erreur, il faudrait appeler 'raise', mais je ne maîtrise pas encore...)

                -
                Edité par robun il y a environ 1 heure

                Ce que j'ai présenté n'est qu'une partie du code par rapport à la ligne 5 où le try-except est inutile. Là où le try-except est utile est lors du cast float.

                Autre manière de faire,

                while True:
                    try:
                        score = float(input("Enter Score: "))
                    except ValueError:
                        print("Erreur")
                        continue
                    if not 0 <= score <= 1.0:
                        print("Vous n'avez pas rentrer un nombre entre 0 et 1")
                    else:
                        break
                
                print(score)

                Préciser l'exception est important, tu pourrais cacher une autre exception et avoir des difficultés à débugger car except rendrait cela transparent.

                -
                Edité par Fredo54 17 novembre 2018 à 14:33:26

                • Partager sur Facebook
                • Partager sur Twitter

                Bonne journée...

                  17 novembre 2018 à 21:01:42

                  Fredo54 a écrit:

                  Préciser l'exception est important, tu pourrais cacher une autre exception et avoir des difficultés à débugger car except rendrait cela transparent.

                  Je le comprends et c'est en effet un autre progrès que je dois faire. Il faut être capable d'anticiper les exceptions possibles (et bien comprendre à quoi elles correspondent...)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 novembre 2018 à 10:04:32

                    robun a écrit:

                    Fredo54 a écrit:

                    Préciser l'exception est important, tu pourrais cacher une autre exception et avoir des difficultés à débugger car except rendrait cela transparent.

                    Je le comprends et c'est en effet un autre progrès que je dois faire. Il faut être capable d'anticiper les exceptions possibles (et bien comprendre à quoi elles correspondent...)


                    Tu peux t'appuyer sur le tutoriel officiel traduit et qui t'aideras à y comprendre les mécanismes, même si pour un débutant python, ça peut être difficile à appréhender, ça l'est moins pour un expérimenté du développement ;)

                    -
                    Edité par Fredo54 18 novembre 2018 à 10:04:48

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Bonne journée...

                    Anonyme
                      18 novembre 2018 à 12:02:39

                      Il ne faut pas non-plus chercher à gérer les exceptions à tout prix !

                      Typiquement dans le cas présent, la conversion d'une saisie de l'utilisateur en un nombre à virgule flottante, on a pas besoin de gérer les exceptions autres que celles liées à la valeur que représente la chaîne de caractères saisie par l'utilisateur : ValueError. Et exceptionnellement dans le cas d'un float on peut aussi gérer une OverflowError si l'utilisateur entre un nombre trop grand.

                      Mais il est généralement hors de propos de gérer une EOFError, qui peut se produire selon le contexte d'exécution du programme (flux standard non-bloquant) ou si l'utilisateur appui sur CTRL+D ou CTRL+Z. Ça pourrait même être dangereux si une RuntimeError était passée sous silence...

                      Il y a des exceptions qui doivent mettre un terme au programme et être rapportées à l'utilisateur et/ou aux développeurs sans corrompre le traceback, d'autres qui peuvent être passée sous silence et d'autres qu'il faut gérer. C'est pour cette raison qu'il faut toujours préciser l'exception à gérer ou à passer sous silence.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        18 novembre 2018 à 23:24:30

                        Étant débutant le tuto officiel mais encore hors de portée en tout cas j ai bien compris vos solutions.

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Python exception

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown