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 :

Try,Except explication ?


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    �tudiant
    Inscrit en
    Juillet 2021
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 25
    Localisation : France, Seine et Marne (�le de France)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Juillet 2021
    Messages : 3
    Par d�faut Try,Except explication ?
    Bonjour le forum

    Une �me charitable pour m'expliquer de mani�re simple l'utilit� d'un "Try" ou "Except" en langage python, pourquoi l'utilise t-on? j'ai bien tent� des recherches mais tous en anglais et �a reste un peu (beaucoup?) flou... un petit exemple que j'ai pu voir .

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    #Example
    #The try block will generate an exception, because x is not defined:
     
    try:
      print(x)
    except:
      print("An exception occurred")
    Ou encore un autre exemple ici

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    try:
      print(x)
    except NameError:
      print("Variable x is not defined")
    except:
      print("Something else went wrong")

    D'apr�s ce que j'ai pu comprendre (j'expliquerai surement mal) le "Try" est une "tentative" si celle ci �choue alors c'est l� qu'interviendra "Except" on impl�mente des exceptions dans le code afin d'�viter que celui-ci crash?

    Merci pour vos explications

  2. #2
    Expert confirm� Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par d�faut
    salut,

    en gros le m�canisme try/except r�pond � la maxime selon laquelle "il vaut mieux demander pardon que demander la permission".
    si par exemple on veut ouvrir un fichier, on essaye (try) de l'ouvrir directement, et s'il n'existe pas on s'excuse gentiment aupr�s de l'OS.
    tandis que si au lieu de �a on v�rifiait au pr�alable si le fichier existe (if -> open) on pourrait �ventuellement se retrouver dans un cas o� le fichier existe au moment de la v�rification et n'existe plus au moment de l'ouvrir.
    c'est le cas d'application typique d'une attaque TOCTOU (Time Of Check, Time Of Use), et -tr�s- accessoirement dans le cas o� le try r�ussit �a fait moins de code � ex�cuter, le codepath est plus direct.

  3. #3
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 770
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : Architecte technique retrait�
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 770
    Par d�faut
    Salut,

    Citation Envoy� par Hasmodan Voir le message
    Une �me charitable pour m'expliquer de mani�re simple l'utilit� d'un "Try" ou "Except" en langage python, pourquoi l'utilise t-on?
    Prenez une foncton comme int qui transforment une chaine de caract�res en nombre entier/flottant. On va �crire n = int('123') et dans ce cas on se retrouve avec l'entier 123 associ� � la variable n.

    Maintenant, imaginons que je me plante et �crive n = int('123X').
    Quelle sera la fa�on la plus simple pour que "int" signale qu'il ne peut pas faire le boulot que je lui demande? G�n�rer une exception.

    Avant l'utilisation des exceptions, permette � int de signaler qu'il ne peut pas faire le boulot avec ce qu'on lui a pass� se faisait via 2 variables: une retournant un status d'erreur et une autre le r�sultat qui ne pouvait �tre utilis� qu'apr�s avoir test� que l'op�ration s'�tait bien pass�e.

    Souvent le programmeur ind�licat oublie de tester le status... et on se retrouve avec des erreurs incompr�hensibles qui se manifestent bien plus tard (lorsqu'on utilise le r�sultat qui sans �tre valide peut rester utilisable...).

    Avec le m�canisme d'exception, soit le programme s'arr�te (c'est mieux que de faire n'importe quoi) soit le programmeur a pr�vu que faire dans ce cas l� (ce qui se traduit par la construction try...except...).

    Le reste est dans les tutos.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Candidat au Club
    Homme Profil pro
    �tudiant
    Inscrit en
    Juillet 2021
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 25
    Localisation : France, Seine et Marne (�le de France)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Juillet 2021
    Messages : 3
    Par d�faut
    Merci pour les r�ponses

    Je vais illustr� avec mes propres mots/sch�ma

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    a = 0
    b = 278
    try:
        b/a
        print("Good Job")
    except:
        print("ERREUR!!! en mathématique la division par 0 est impossible =D ")
    Ici un exemple basique mais qui est pour moi tr�s parlant, je tente de faire une division par "0" qui math�matiquement est pas possible (enfin je crois ) donc comme c'est "impossible" je rentre dans le cas "D'except" et il me retourne une erreur car c'est pas possible de faire la division.


    Cependant
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    a = 40
    b = 278
    try:
        b/a
        print("Good Job")
    except:
        print("ERREUR!!! en mathématique la division par 0 est impossible =D ")
    Le r�sultat sera "Good Job" car l'op�ration est possible, donc la "condition" "Try" est respect�

    Suis-je bon?

  5. #5
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 770
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : Architecte technique retrait�
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 770
    Par d�faut
    Salut,

    Citation Envoy� par Hasmodan Voir le message
    donc comme c'est "impossible" je rentre dans le cas "D'except" et il me retourne une erreur car c'est pas possible de faire la division.
    "retourner une erreur" et "lever une exception" ont un sens diff�rent.
    Imaginez la fonction:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    def f(a, b):
         return b / a
    Elle retourne le r�sultat de la division de b par a (et �� g�n�re une exception si a est 0)

    Maintenant, imaginons utiliser f dans une fonction g:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    def g(b):
         for a in range(3, -1, -1):
              print (f(a, b))
    g ne retourne rien, elle se contente d'afficher ce que retourne f.

    Enfin on appelle g... et bien sur �� plante:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> g(5)
    1.6666666666666667
    2.5
    5.0
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 3, in g
      File "<stdin>", line 2, in f
    ZeroDivisionError: division by zero
    >>>
    La question est o� mettre un try...except: dans f? dans g? encore plus haut?
    Sachant que le try...except... me permet d'attraper l'exception et que la g�rer signifie la masquer pour l'appelant (sinon �� veut dire quoi "je g�re"?).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    F�vrier 2006
    Messages
    12 848
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 12 848
    Billets dans le blog
    1
    Par d�faut
    Bonjour
    Citation Envoy� par Hasmodan Voir le message
    Le r�sultat sera "Good Job" car l'op�ration est possible, donc la "condition" "Try" est respect�

    Suis-je bon?
    Ok mais attention aux termes. "try" ce n'est pas une condition, c'est un "essai".
    Et g�n�ralement on pr�f�re affiner le cas d'echec plut�t que de mettre un "except" g�n�ral. Dans ce cas, l'exception sera "ZeroDivisionError". Et enfin l'exception retournant un objet, il peut �tre utile de r�cup�rer cet objet pour (par exemple) l'afficher
    Donc le tout pourrait s'�crire

    Code python : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    a = 0
    b = 278
    try:
        b/a
        print("Good Job")
    except ZeroDivisionError as e:
        print("ERREUR!!! en mathématique la division par 0 est impossible (%s)" % e)

    Citation Envoy� par BufferBob Voir le message
    ...et s'il n'existe pas on s'excuse gentiment aupr�s de l'OS.
    Non, c'est plut�t "...et s'il n'existe pas l'OS r�le mais je m'en bats le steak". Mais j'aime bien ta fa�on de voir les choses
    Mon Tutoriel sur la programmation �Python�
    Mon Tutoriel sur la programmation �Shell�
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les diff�rentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. try except qu'on m'explique
    Par pierrot67 dans le forum Bases de donn�es
    R�ponses: 2
    Dernier message: 12/04/2006, 10h52
  2. Probl�me avec Try ... Except
    Par Kcintim dans le forum Langage
    R�ponses: 1
    Dernier message: 25/03/2006, 15h31
  3. "try...except" sans message d'erreur
    Par SchpatziBreizh dans le forum Langage
    R�ponses: 4
    Dernier message: 12/07/2005, 09h50
  4. [try except keyerror] r�cup�rer le nom de la variable
    Par jean-jacques varvenne dans le forum G�n�ral Python
    R�ponses: 2
    Dernier message: 03/03/2005, 16h59
  5. bloc try/except et API windows
    Par jakouz dans le forum API, COM et SDKs
    R�ponses: 5
    Dernier message: 24/02/2005, 12h21

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