にこのコードを含むテキストでは動作しません:PythonのフォーマットはJSON
'From {"value": 1}, value={value}'.format(value=1)
は(Pythonの2.7.12とPython 3.6.xの)を次のように失敗する:
Traceback (most recent call last):
File "test_format.py", line 1, in <module>
'From {"value": 1}, value={value}'.format(value=1)
KeyError: '"value"
Pythonインタプリタはその"value"
を不平を言いますメソッドformat
の引数に渡されませんでした。
しかしformat string syntaxによれば、この場合には、識別子によって構成され
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
field_name ::= arg_name ("." attribute_name | "[" element_index "]")*
arg_name ::= [identifier | integer]
attribute_name ::= identifier
element_index ::= integer | index_string
index_string ::= <any source character except "]"> +
conversion ::= "r" | "s"
format_spec ::= <described in the next section>
replacement_fieldは、引用符を持つべきではありません。
identifier ::= (letter|"_") (letter | digit | "_")*
letter ::= lowercase | uppercase
lowercase ::= "a"..."z"
uppercase ::= "A"..."Z"
digit ::= "0"..."9"
だから、仕様に従って、{value}
が有効なフォーマット文字列識別子として認識されるべきと{"value"}
を無視する必要があります。ここでは識別子のための字句定義があります。
Pythonはドキュメントの仕様に従っていないようです。キーの中には識別子として受け入れられます。
なぜPythonはそのように動作しますか?私はここで何が欠けていますか?
なぜ最初に '.format()'を使ってJSONを作成しようとしていますか? 'json'モジュールを使います。 – Barmar
"value"は式であるがキーワードではないので、引用符は許可されないので、 '{" value "}"は置換フィールドとして扱うことができません。 – LuCima
@LuCimaトレースバックを参照してください。Pythonは '' value "'という名前の引数を苦情を申し立てています –