Python format throws KeyError
Question:
The following code snippet:
template = "
function routes(app, model){
app.get('/preNew{className}', function(req, res){
res.render('{className}'.ejs, {});
});
});".format(className=className)
throws a KeyError:
Traceback (most recent call last): File "createController.py", line 31, in <module>
});".format(className=className) KeyError: ' app'
Does someone know why?
Answers:
You have a number of unescaped braces in that code. Python considers all braces to be placeholders and is trying to substitute them all. However, you have only supplied one value.
I expect that you don’t want all your braces to be placeholders, so you should double the ones that you don’t want substituted. Such as:
template = """
function routes(app, model){{
app.get('/preNew{className}', function(req, res){{
res.render('{className}'.ejs, {{}});
}};
}});""".format(className=className)
I also took the liberty of using triple quotes for the string literal so you don’t need the backslashes at the end of each line.
The following code snippet:
template = "
function routes(app, model){
app.get('/preNew{className}', function(req, res){
res.render('{className}'.ejs, {});
});
});".format(className=className)
throws a KeyError:
Traceback (most recent call last): File "createController.py", line 31, in <module>
});".format(className=className) KeyError: ' app'
Does someone know why?
You have a number of unescaped braces in that code. Python considers all braces to be placeholders and is trying to substitute them all. However, you have only supplied one value.
I expect that you don’t want all your braces to be placeholders, so you should double the ones that you don’t want substituted. Such as:
template = """
function routes(app, model){{
app.get('/preNew{className}', function(req, res){{
res.render('{className}'.ejs, {{}});
}};
}});""".format(className=className)
I also took the liberty of using triple quotes for the string literal so you don’t need the backslashes at the end of each line.