2012-03-08 14 views
34

Il seguente frammento di codice:formato Python lancia KeyError

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

getta un KeyError:

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

Qualcuno sa perché?

+8

È necessario raddoppiare tutte le parentesi graffe che non devono essere formattate. –

+1

Ti sei imbattuto in [stringhe multilinea] (http://docs.python.org/tutorial/introduction.html#strings)? Se usi le virgolette triple, non devi sfuggire a ogni nuova riga. – katrielalex

+0

possibile duplicato di [str.format() non funziona, keyError] (http://stackoverflow.com/questions/2755201/str-format-does-not-work-keyerror) – luator

risposta

50

Hai un numero di parentesi graffe senza escape in quel codice. Python considera tutte le parentesi come segnaposto e sta tentando di sostituirli tutti. Tuttavia, hai fornito solo un valore.

Mi aspetto che non si desideri che tutte le parentesi siano segnaposto, quindi è necessario raddoppiare quelle che non si desidera sostituire. Come ad esempio:

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

Ho anche preso la libertà di utilizzare virgolette triple per la stringa letterale in modo che non è necessario il backslash alla fine di ogni riga.

Problemi correlati