价值错误:期待价值

时间:2016-02-18 00:57:56

标签: python

我使用python的数据分析书中有一行代码。

return = [json.loads(line) for line in open(path)]

Path是指定的文本文件,里面有JSON格式的文本。

链接在这里。 https://raw.githubusercontent.com/pydata/pydata-book/master/ch02/usagov_bitly_data2012-03-16-1331923249.txt

ValueError                                Traceback (most recent call last)
<ipython-input-35-b1e0b494454a> in <module>()
----> 1 records = [json.loads(line) for line in open(path)]

<ipython-input-35-b1e0b494454a> in <listcomp>(.0)
----> 1 records = [json.loads(line) for line in open(path)]

/usr/lib/python3.4/json/__init__.py in loads(s, encoding, cls,    object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
316             parse_int is None and parse_float is None and
317             parse_constant is None and object_pairs_hook is None and not kw):
--> 318         return _default_decoder.decode(s)
319     if cls is None:
320         cls = JSONDecoder

/usr/lib/python3.4/json/decoder.py in decode(self, s, _w)
341 
342         """
--> 343         obj, end = self.raw_decode(s, idx=_w(s, 0).end())
344         end = _w(s, end).end()
345         if end != len(s):

/usr/lib/python3.4/json/decoder.py in raw_decode(self, s, idx)
359             obj, end = self.scan_once(s, idx)
360         except StopIteration as err:
--> 361             raise ValueError(errmsg("Expecting value", s, err.value)) from None
362         return obj, end

ValueError: Expecting value: line 2 column 1 (char 1)

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

如您在跟踪中所述,返回的值是None类型。 Null,没有什么可以回来的。仔细检查您的来源。

答案 1 :(得分:0)

第2行以

开头
"a": "GoogleMaps\/RochesterNY",

第1行,其他行以

开头

“a”:“Mozilla / 5.0(Windows NT 6.1; WOW64)AppleWebKit / 535.11(KHTML,与Gecko一样)Chrome / 17.0.963.78 Safari / 535.11”,

似乎“a”键应该是浏览器类型的指示符,而不是URL描述。当您尝试解码时,这可能会导致问题。我建议将其从数据中删除,看看会发生什么。

致电

--> 343         obj, end = self.raw_decode(s, idx=_w(s, 0).end())

似乎有误。您是否编写了自己的raw_decode()版本作为Python JSON手册](https://docs.python.org/3/library/json.html)声明

  

raw_decode(S)

     

从s解码JSON文档(以JSON文档开头的str)和   返回Python表示的2元组和   文档结束的索引。

     

这可用于从可能具有的字符串解码JSON文档   最后的无关数据。

表示ext不是标准函数的有效参数。最好用不同的名称编写自己的函数,以防止意外使用。

同样,你最好还是写你的for循环

records = [json.loads(line) for line in open(path)]

如     for open in line(path):         records = [json.loads(line)

但是,考虑到似乎是从raw_decode引发异常,看起来您尝试解码的行包含错误。您应检查正在处理的数据并处理错误或修复数据。由于它是JSON行,您应该能够打印该行以确定错误是什么。它可能是您的代码或实际的数据行。