2017-07-20 1 views
0

J'ai un problème avec Python (2.7) - J'ai un projet cookiecutter qui demande une entrée (via CLI) et génère mon projet basé sur cette entrée.Problèmes avec catch eval() SyntaxError using cookiecutter

Un de mes champs est une description, et je l'ai vu que l'ajout de guillemets dans, à savoir « Bonjour ceci est « ma » description » provoquera une erreur de syntaxe quand je passe à travers eval:

File "/var/folders/4b/gzszrl3d5fn1q7vvv05s63vmf014cj/T/tmpnJWgqK.py", line 53 
    parameters = eval("{u'description': u'Hello this is "my" description'}") 
SyntaxError: invalid syntax 
ERROR: Stopping generation because pre_gen_project hook script didn't exit successfully 

la section de l'exécution du code est ce:

try: 
    parameters = eval("{{ cookiecutter }}") 
except: 
    print('An error occurred!') 
    sys.exit(1) 

Mon problème est le code entre la clause ne except, donc je n'ai aucune chance de sortir avec élégance.

Y at-il un moyen de mieux gérer cela?

P.S. Je sais que je peux désinfecter l'entrée en utilisant des filtres Jinja2, mais je cherche une solution qui me permet de gérer une erreur sans modifier l'entrée.

+1

Cela n'atteindra pas la except car il est un sens 'SyntaxError' que l'erreur se trouve lors de l'analyse, qui se produit avant d'exécuter votre code. Donc, vous devez vous débarrasser de tout 'SyntaxError's pour votre sauf pour travailler. –

Répondre

1

eval("{u'description': u'Hello this is "my" description'}") est votre problème. Vous devez vous échapper " entre my.

eval("{u'description': u'Hello this is \"my\" description'}")

+0

Hey @Arount, mon problème est que je n'ai pas le contrôle de l'entrée de l'utilisateur et je ne m'attends pas à ce que les gens échappent à leur propre texte. Je peux y échapper moi-même en utilisant les filtres d'échappement/remplacement de Jinja2, mais je ne peux pas éditer l'entrée en raison de la façon dont le projet est présenté. Je cherche un moyen de gérer l'erreur gracieusement sans modifier l'entrée. –