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 :

erreur vers dict


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2017
    Messages : 105
    Par défaut erreur vers dict
    Bonjour, je pense qu'il n'y a pas un module qui permet de transformer les erreurs en dict.

    Exemples:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    erreur1= 'Traceback (most recent call last):\r\n  File \"<string>\", line 3, in <module>\r\nZeroDivisionError: division by zero\r\n'
    erreur2= 'Traceback (most recent call last):\r\n  File \"<string>\", line 2, in <module>\r\n  File \"<string>\", line 1, in f\r\n  File \"<string>\", line 1, in f\r\n  File \"<string>\", line 1, in f\r\n  [Previous line repeated 996 more times]\r\nRecursionError: maximum recursion depth exceeded\r\n'
    erreur3='File \"<string>\", line 6\r\n    y=0z\r\n       ^\r\nSyntaxError: invalid syntax\r\n'
    Je cherche à extraire la première ligne d'erreur rencontrée (3), le type d'erreur (ZeroDivisionError) puis le message d'erreur (division by zero)
    J'ai essayé les splits mais cela devient assez compliqué.
    Les expressions régulières me gardent les "\r\n" ou line , j'ai essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    retour={'line':'','typeerror':'','message':''}
    erreur= 'Traceback (most recent call last):\r\n  File \"<string>\", line 2, in <module>\r\n  File \"<string>\", line 1, in f\r\n  File \"<string>\", line 1, in f\r\n  File \"<string>\", line 1, in f\r\n  [Previous line repeated 996 more times]\r\nRecursionError: maximum recursion depth exceeded\r\n'
    result1=re.search("line \d+", erreur)
    if(result1):retour['line']=result1.group()
    result2=re.search("\r\n.*:", erreur)
    if(result2):retour['typeerror']=result2.group()
    result3=re.search(":.*\r\n", erreur)
    if(result3):retour['message']=result3.group()

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    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 778
    Par défaut
    Salut,

    Vous avez un module traceback pour ce genre de choses.

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

  3. #3
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2017
    Messages : 105
    Par défaut
    La ligne est la suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    retour=subprocess.run(...)
    Le message d'erreur est dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    retour.stdout.decode('utf-8')
    Avec traceback je capture seulement ...returned non-zero exit status 1

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    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 778
    Par défaut
    Salut,

    Si j'ai bien suivi le code exécuté par subprocess est "fabriqué" à la volée.

    Rien ne vous empêche d'encapsuler le code à exécuter par un try... except... Ce qui permet de récupérer l'exception et de piocher dans le traceback les informations désirées. Après on peut les mettre sous la forme d'un dictionnaire, et le sérialiser en JSON pour que l'appelant puisse en faire quelque chose.

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

Discussions similaires

  1. Exporter les enregistrements en erreur vers Excel
    Par maoboyindo dans le forum SSIS
    Réponses: 0
    Dernier message: 03/05/2018, 14h23
  2. Rediriger la sortie standard/erreur vers une chaîne
    Par LaVaZza dans le forum Débuter
    Réponses: 2
    Dernier message: 11/07/2009, 16h58
  3. Afficher des liens dans les erreurs vers les classes
    Par root76 dans le forum Eclipse Platform
    Réponses: 0
    Dernier message: 18/06/2009, 10h17
  4. Réponses: 6
    Dernier message: 16/07/2007, 17h11
  5. Erreur d'exportation vers Excel : Trop de champs definis
    Par deglingo37 dans le forum Access
    Réponses: 3
    Dernier message: 15/06/2005, 17h30

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