2017-07-20 1 views
0

Ich habe ein Problem in Python (2.7) - Ich habe ein Cookiecutter-Projekt, das zur Eingabe (über CLI) auffordert und dann mein Projekt basierend auf dieser Eingabe generiert.Probleme mit dem Auffangen von eval() SyntaxError mit cookiecutter

Einer meiner Felder ist eine Beschreibung, und ich habe das in, dh das Hinzufügen Anführungszeichen gesehen ‚Hallo dies‚meine‘Beschreibung‘ einen Syntaxfehler verursachen, wenn ich es durch eval übergeben:

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 

der Abschnitt des Codes dieser Ausführung ist:

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

Mein Problem ist der Code nie die except Klausel eintritt, so habe ich keine Chance, anmutig zu verlassen.

Gibt es eine Möglichkeit, damit ich besser umgehen kann?

P.S. Ich weiß, dass ich die Eingabe mithilfe einiger Jinja2-Filter bereinigen könnte, aber ich suche nach einer Lösung, mit der ich einen Fehler behandeln kann, ohne die Eingabe zu ändern.

+1

Dies wird die except-Anweisung nicht erreichen, da es ein 'SyntaxError' ist was bedeutet, dass der Fehler gefunden wird beim Parsen, die vor dem Ausführen von Code auftritt. Sie müssen also alle '' SyntaxError''s loswerden, nur um zu arbeiten. –

Antwort

1

eval("{u'description': u'Hello this is "my" description'}") ist dein Problem.

Sie müssen " zwischen my entkommen.

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

+0

Hey @Arount, mein Problem ist, dass ich keine Kontrolle über Benutzereingaben habe und erwarte nicht, dass Leute ihren eigenen Text verlieren. Ich kann es entkommen selbst mit Escape/ersetzen Jinja2 Filter, kann aber nicht die Eingabe bearbeiten, wie das Projekt angelegt ist. Ich suche nach einem Weg, um den Fehler anmutig zu behandeln, ohne die Eingabe zu ändern. –