2017-07-20 9 views
0

Python(2.7)で問題が発生しました - CLIを使用して入力を促し、その入力に基づいてプロジェクトを生成するcookiecutterプロジェクトがあります。私のフィールドのeval()をキャッチする際の問題cookiecutterを使用したSyntaxError

一つが記述され、そして私は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 

これを実行するコードのセクションは次のとおりです。

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

私の問題は、コードがexcept句に入ることはありませんので、私は正常に終了する機会を持っていないです。

私はこれをよりうまく処理できる方法はありますか?

P.S.私はいくつかのJinja2フィルターを使って入力を消毒することができますが、入力を変更せずにエラーを処理できる解決法を探しています。

+1

それはあなたのコードを実行する前に発生した解析中にエラーが検出されたことを意味し、 'SyntaxError'、であるように、これは除いてのステートメントに到達しません。だから、あなたの例外を除いて、 'SyntaxError'を取り除く必要があります。 –

答えて

1

eval("{u'description': u'Hello this is "my" description'}")が問題です。

"myにエスケープする必要があります。

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

+0

ちょっと@Arount、私の問題は、私はユーザーの入力を制御することはないと人々が自分のテキストをエスケープするとは思わない。私はそれをエスケープ/置換Jinja2フィルタを使用して自分自身をエスケープすることができますが、プロジェクトのレイアウトのために入力を編集することはできません。私は入力を変更せずに正常にエラーを処理する方法を探しています。 –

関連する問題