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()