pyfe est un projet écrit en C++ dont le but est de permettre de convertir les messages d'erreurs de Python en des messages plus lisibles, précis et adaptés dans le contexte de programmes simples écrits en Python, Blockly ou Scratch. Il gère les cas les plus courants, et renvoie, dans le cas contraire, l'erreur par défaut de Python. Il a pour but de servir aux débutants et aux plus jeunes pour faciliter leur apprentissage du langage.
- Télécharger le code :
git clone <url du repo> - Compiler le projet
make
L'exécutable est le fichier pyfe. Il peut être déplacé, mais il doit toujours y avoir le fichier errorMessages.json copié dans le même dossier.
pyfe solution.py pythonStderr [outputDest.json=""] [target(=python)] [langage(=fr)]solution.py: chemin vers un fichier contenant le code Python qui a été exécutépythonStderr: chemin vers un fichier contenant la sortie d'erreur de l'interpéteur Python uniquement (pas la sortie standard !).outputDest.json: chemin vers un fichier (éventuellement à créer) où sera écrit une description du résultat en JSON, uniquement si pyfe se termine correctement. Peut être vide, dans ce cas aucune sortie JSON ne sera écrite.target:python,blocklyouscratch.
Le programme renvoie 0 s'il s'est bien exécuté. Dans le cas contraire, ne pas utiliser la sortie standard ni le fichier outputDest.json. Il renvoie par exemple 1 si aucune erreur n'a été trouvée.
Si le programme s'est correctement exécuté, le fichier outputDest.json sera écrit selon le format suivant :
{
"blockIds": ["blockId1", "blockId2", ...], // Ids des blocs blockly / scratch
"causeFound": true, // Si le message a bien été interprété
"line": [id_de_la_ligne], // Entier >= 1
"messageId": "[identifiant_de_l_erreur]",
"stderr": "[Sortie d'erreur de python]",
"text": "[Message interprété par pyfe]",
"vars": {...} // Variables utilisées dans le message
}- Si
causeFoundvaut false,messageIdsera vide, ettextcorrespondra à la sortie d'erreur de Python.
- Tester en local sur un fichier Python :
./testOn.sh path_to_code.py - Lancer les tests :
python3 tests/run.py- La suite de tests n'est que partielle.
Ce fichier a pour but de regrouper les messages qui seront affichés, dans différentes langues. L'objet principal contient des clés, chacune correpondant à un langage. Le contenu de ses sous-objets est un ensemble de couples clé/valeur, la clé correpondant à un type d'erreur, la valeur au texte qui sera affiché.
- Pour associer plusieures clés à un seul texte, on peut les séparer par
'|'comme ici :"typeError1|typeError2": "myMessage" - Un texte peut inclure des paramètres sous la forme:
{{param_name}}, avec 'param_name' le nom du paramètre, tel que défini danserrorParser.cpp. La clé{{target}}est toujours définie, et vautpython,blocklyouscratchselon le cas.
{ "fr": {
"python" : {
"IndexError|KeyError": "Clée ou index invalide",
"ZeroDivisionError": "Division par zéro, dans le langage {{target}}."
}
}, "en":{
"python" : {
"IndexError|KeyError": "invalid key or index",
"ZeroDivisionError": "Division by zero"
}
}}