2012-03-08 9 views
34

次のコードスニペットをスロー:PythonのフォーマットはKeyError例外

template = "\                     
function routes(app, model){\                 
    app.get('/preNew{className}', function(req, res){\           
    res.render('{className}'.ejs, {});\              
    });\                      
});".format(className=className) 

はKeyError例外がスローされます。

Traceback (most recent call last): File "createController.py", line 31, in <module> 
    });".format(className=className) KeyError: ' app' 

誰かが理由を知っていますか?

+8

フォーマットしない中括弧をすべて二重にする必要があります。 –

+1

[複数行](http://docs.python.org/tutorial/introduction.html#strings)に出会ったことがありますか? 3重引用符を使用する場合、改行をエスケープする必要はありません。 – katrielalex

+0

[str.format()が動作しない、keyError](http://stackoverflow.com/questions/2755201/str-format-does-not-work-keyerror) – luator

答えて

50

このコードには、エスケープされていない括弧がいくつかあります。 Pythonはすべての中カッコをプレースホルダと見なし、それらをすべて代用しようとしています。ただし、1つの値しか指定していません。

私はあなたの中括弧がすべてプレースホルダーになることを望んでいないので、置き換えたくないものを倍増してください。以下のような:

template = """                 
function routes(app, model){{ 
    app.get('/preNew{className}', function(req, res){{ 
    res.render('{className}'.ejs, {{}});           
    }};              
}});""".format(className=className) 

私はまた、文字列リテラルのためのトリプル引用符を使用しての自由を取ったので、あなたは、各行の末尾にバックスラッシュを必要としません。

関連する問題