以下代码段:
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'
有人知道为什么吗?
答案 0 :(得分:72)
您在该代码中有许多未转义的大括号。 Python认为所有大括号都是占位符,并试图将它们全部替换掉。但是,您只提供了一个值。
我希望您不希望所有大括号都是占位符,因此您应该将那些不想要替换的大括号加倍。如:
template = """
function routes(app, model){{
app.get('/preNew{className}', function(req, res){{
res.render('{className}'.ejs, {{}});
}};
}});""".format(className=className)
我还冒昧地使用三重引号作为字符串文字,因此您不需要在每行末尾使用反斜杠。
答案 1 :(得分:0)
好吧,没有format
的另一种方法可能是:
In [1673]: className = 'myclass'
In [1674]: template = 'function routes(app, model){app.get("/preNew"{'+className+'}, function(req, res){res.render({"'+className+'".ejs, {});});});'
In [1675]: template
Out[1675]: 'function routes(app, model){app.get("/preNew"{myclass}, function(req, res){res.render({"myclass".ejs, {});});});'