2012-03-08 182 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

您需要將所有不應格式化的花括號加倍。 – 2012-03-08 18:52:47

+1

你遇到過[多行字符串](http://docs.python.org/tutorial/introduction.html#strings)嗎?如果您使用三重引號,則不必轉義每一個換行符。 – katrielalex 2012-03-08 18:55:15

+0

[str.format()不可用,keyError](http://stackoverflow.com/questions/2755201/str-format-does-not-work-keyerror) – luator 2015-09-09 12:41:02

回答

50

該代碼中有許多未轉義的大括號。 Python認爲所有的大括號都是佔位符,並試圖將它們全部替換掉​​。但是,您只提供了一個值。

我希望你不想讓所有的大括號都成爲佔位符,所以你應該使你不想要的大括號加倍。如:

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

我還使用了三引號的字符串文字,所以你不需要反斜線在每行結束的自由。