2012-03-08 15 views
34

Poniższy fragment kodu:Format Python rzuci KeyError

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

rzuca KeyError:

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

Czy ktoś wie dlaczego?

+8

Należy podwoić wszystkie nawiasy klamrowe, które nie powinny być sformatowane. –

+1

Czy natknąłeś się na [ciągi wielowierszowe] (http://docs.python.org/tutorial/introduction.html#strings)? Jeśli użyjesz potrójnego cudzysłowu, nie musisz uciekać z każdego nowego wiersza. – katrielalex

+0

możliwy duplikat funkcji [str.format() nie działa, keyError] (http://stackoverflow.com/questions/2755201/str-format-does-not-work-keyerror) – luator

Odpowiedz

50

Masz kilka nieoszlifowanych nawiasów klamrowych w tym kodzie. Python uważa, że ​​wszystkie nawiasy są symbolami zastępczymi i stara się je wszystkie zastąpić. Jednak dostarczyłeś tylko jedną wartość.

Oczekuję, że nie chcesz, aby wszystkie klamry były symbolami zastępczymi, więc powinieneś podwoić te, których nie chcesz zastąpić. Takich jak:

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

Wziąłem także wolność korzystania z potrójnych cudzysłowów dla struny dosłownym więc nie trzeba ukośniki na końcu każdej linii.

Powiązane problemy