2017-10-05 24 views
0

Je suis en train de compiler un script python et enregistrer toutes les erreurs de syntaxeCatch py_compile.PyCompileError et convertir en chaîne

J'ai un script appelé test.py qui ressemble

#!/usr/bin/python 
import py_compile 
try: 
    py_compile.compile("answer.py") 
except py_compile.PyCompileError as e: 
    print(e) 

réponse. py est juste un script autonome qui ne fait rien sauf imprimer quelque chose (pour l'instant)

J'ai aussi une commande php exec dans un fichier php qui exécute test.py, le problème est que php exec n'est pas retourné rien par

print(e)

Je suppose que e ici PyCompileError est pas une chaîne ou quelque chose de bizarre avec le format, le résultat est tout simplement revenir à vide « ». Quand je jouais avec, il semble être un objet, pas sûr de savoir comment le convertir en une chaîne.

J'ai essayé de le mettre dans une chaîne mais cela ne fonctionne pas, si je change e dans une chaîne comme print("You have errors") Je reçois la bonne sortie, donc ce n'est pas mon php mais je veux les erreurs de syntaxe sur les lignes. Même pas sûr si je devrais utiliser compilent() pour cette

+0

Lire (à nouveau) la documentation de 'py_compile.compile()'. Astuce: 'doraise' –

+0

Ne vous occupez pas de cette question, j'ai compris comment, juste' print (e.exc_value) ', la documentation sur py_compile un peu suce donc il m'a fallu un certain temps pour le comprendre. Aussi je viens de voir ce commentaire et j'ai essayé d'augmenter mais je ne savais pas quelle valeur de PyCompileError était celle à imprimer, je pensais que ce serait msg mais ce n'est pas le cas. – 5Ermacs

Répondre

0

j'ai tout compris, au fond je avais besoin doraise = True et obtenir print(e.exc_value)

Je ne initialement ai doraise=True avant que les gens pensent que je suis paresseux et ne pas lire la documentation, mais je ne savais pas exc_value était la variable qui avait le message (j'essayais d'obtenir e.msg) donc je l'ai éteint car il a dit par défaut, il imprime à stderr avec elle, et j'ai essayé de travailler De là.

Veuillez ignorer