2012-03-08 34 views
34

Đoạn mã sau:định dạng Python ném KeyError

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

ném một KeyError:

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

Không ai biết tại sao?

+8

Bạn cần phải gấp đôi tất cả dấu ngoặc nhọn không được định dạng. –

+1

Bạn có gặp [chuỗi đa luồng] không (http://docs.python.org/tutorial/introduction.html#strings)? Nếu bạn sử dụng dấu ngoặc kép, bạn không phải thoát khỏi mỗi dòng mới. – katrielalex

+0

bản sao có thể có của [str.format() không hoạt động, keyError] (http://stackoverflow.com/questions/2755201/str-format-does-not-work-keyerror) – luator

Trả lời

50

Bạn có một số dấu ngoặc chưa được thoát trong mã đó. Python xem xét tất cả niềng răng là phần giữ chỗ và đang cố gắng thay thế tất cả. Tuy nhiên, bạn chỉ cung cấp một giá trị.

Tôi hy vọng rằng bạn không muốn tất cả các niềng răng của bạn được giữ chỗ, vì vậy bạn nên tăng gấp đôi những cái mà bạn không muốn thay thế. Chẳng hạn như:

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

Tôi cũng lấy tự do sử dụng dấu ngoặc kép cho chuỗi ký tự sao cho bạn không cần dấu gạch chéo ngược ở cuối mỗi dòng.