2012-03-08 16 views
34

El siguiente fragmento de código:formato Python lanza KeyError

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

tiros un KeyError:

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

¿Alguien sabe por qué?

+8

Necesita duplicar todas las llaves que no deben formatearse. –

+1

¿Has encontrado [cadenas multilínea] (http://docs.python.org/tutorial/introduction.html#strings)? Si usa comillas triples, no tiene que escapar cada nueva línea. – katrielalex

+0

posible duplicado de [str.format() no funciona, keyError] (http://stackoverflow.com/questions/2755201/str-format-does-not-work-keyerror) – luator

Respuesta

50

Tiene un número de llaves sin escudar en ese código. Python considera que todos los aparatos ortopédicos son marcadores de posición y está tratando de sustituirlos a todos. Sin embargo, solo ha suministrado un valor.

Espero que no desee que todas sus llaves sean marcadores de posición, por lo que debe duplicar las que no desea sustituir. Tales como:

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

también me tomé la libertad de usar comillas triples para la cadena literal por lo que no necesita las barras invertidas al final de cada línea.