1. ホーム
  2. python

Python 形式は KeyError をスローします。

2023-09-13 04:42:59

質問

次のコードスニペットです。

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

はKeyErrorを投げます。

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

誰か理由を知っていますか?

どのように解決するのですか?

このコードにはエスケープされていない中括弧が多数含まれています。Pythonはすべての中括弧をプレースホルダーとみなし、それらをすべて置き換えようとしています。しかし、あなたは1つの値しか供給していません。

すべての中括弧をプレースホルダーにしたくないと思うので、置換されたくない中括弧を二重にする必要があります。 例えば

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

また、勝手に文字列リテラルにトリプルクォートを使っているので、各行の末尾にバックスラッシュは必要ない。