Python Gotcha's?
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Thu Apr 5 08:00:47 EDT 2012
On Thu, 05 Apr 2012 11:06:11 +0000, Duncan Booth wrote:
> Steven D'Aprano <steve+comp.lang.python at pearwood.info> wrote:
>
>> JSON expects double-quote marks, not single:
>> v = json.loads("{'test':'test'}") fails v =
>> json.loads('{"test":"test"}') succeeds
>>
>>
> You mean JSON expects a string with valid JSON? Quelle surprise.
No. The surprise is that there exists a tool invented in the 21st century
that makes a distinction between strings quoted with " and those quoted
with '. Being used to a sensible language like Python, it boggled my
brain the first time I tried to write some JSON and naturally treated the
choice of quote mark as arbitrary. It especially boggled my brain when I
saw the pathetically useless error message generated:
py> json.loads("{'test':'test'}")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.2/json/__init__.py", line 307, in loads
return _default_decoder.decode(s)
File "/usr/local/lib/python3.2/json/decoder.py", line 351, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/local/lib/python3.2/json/decoder.py", line 367, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Expecting property name: line 1 column 1 (char 1)
"Expecting property name"??? WTF???
The reason this is a Gotcha rather than a bug is because the JSON
standard specifies the behaviour (probably in order to be compatible with
Javascript). Hence, although the behaviour is mind-numbingly stupid, it
is deliberate and not a bug. Hence, a gotcha.
--
Steven
More information about the Python-list
mailing list