2013-05-03 5 views
18

Dlaczego ten kod daje KeyError? KomunikatFormat ciągu łańcuch JSON daje KeyError

output_format = """ 
{ 
    "File": "{filename}", 
    "Success": {success}, 
    "ErrorMessage": "{error_msg}", 
    "LogIdentifier": "{log_identifier}" 
} 
""" 

print output_format.format(filename='My_file_name', 
          success=True, 
          error_msg='', 
          log_identifier='123') 

Błąd:

KeyError: ' "File"' 

Odpowiedz

37

trzeba podwoić zewnętrzne szelki; inaczej Python myśli { "File".. jest odniesienie też:

output_format = '{{ "File": "{filename}", "Success": {success}, "ErrorMessage": "{error_msg}", "LogIdentifier": "{log_identifier}" }}' 

Wynik:

>>> print output_format.format(filename='My_file_name', 
...       success=True, 
...       error_msg='', 
...       log_identifier='123') 
{ "File": "My_file_name", "Success": True, "ErrorMessage": "", "LogIdentifier": "123" } 

Jeżeli indicentally, jesteś produkujących wyjście JSON, to byłoby lepiej wyłączyć za pomocą json module:

>>> import json 
>>> print json.dumps(dict(File='My_file_name', 
...       Success=True, 
...       ErrorMessage='', 
...       LogIdentifier='123')) 
{"LogIdentifier": "123", "ErrorMessage": "", "Success": true, "File": "My_file_name"} 

Zapisz na wyjściu kod true zgodnie z wymaganiami standardu JSON.

+0

Gdybym mógł podać tę odpowiedź, zrobiłbym 10 przegranych. Dzięki –