我一直在关注聊天机器人教程,但卡住了。如果您对我的代码是什么样子感到好奇(我很沮丧,所以我逐字复制了他的代码),我在这篇文章的底部包含了我正在进行的确切步骤作为链接。
在我的代码执行期间,它在抛出异常之前处理了 26,000 多行代码。我的代码可以在下面找到。如您所见,我尝试了各种解决方案,包括将/r 和/n 字符替换为空字符,并添加标签 strict=False
这应该允许未终止的字符串进入 json,但这也不起作用.
with open('C:/Python34/stuff/chatbot/{}/RC_{}'.format(timeframe.split('-')[0], timeframe), buffering=1000) as f:
for row in f:
row_counter += 1
if row_counter > start_row:
try:
row = json.loads(row.replace('\n','').replace('\r',''), strict=False)
---------blah blah blah blah------------
except Exception as e:
print("RUH ROH " + str(e))
准确的错误信息如下:
RUH ROH 未终止的字符串开始于:第 1 行第 368 列(字符 367)
链接: https://pythonprogramming.net/building-database-chatbot-deep-learning-python-tensorflow/
编辑:
摆脱 try catch 在抛出错误时为我提供了更多信息,可以在下面找到:
Traceback (most recent call last):
File "C:/Python34/stuff/chatbot/chatbot_db2.py", line 103, in <module>
row = json.loads(row.replace('\n','').replace('\r',''), strict=False)
File "C:\Python34\lib\json\__init__.py", line 331, in loads
return cls(**kw).decode(s)
File "C:\Python34\lib\json\decoder.py", line 343, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Python34\lib\json\decoder.py", line 359, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Unterminated string starting at: line 1 column 368 (char 367)
编辑 2:
在评论之后,他们建议我打印出引发异常的行。它确实说明了一些问题。
{"subreddit":"sydney","author_flair_text":null,"id":"cqugtij","gilded":0,"removal_reason":null,"downs":0,"archived":false,"created_utc":"1430439358","link_id":"t3_34e5fd","ups":6,"subreddit_id":"t5_2qkob","name":"t1_cqugtij","score_hidden":false,"author_flair_css_class":null,"parent_id":"t1_cqttsc3","controversiality":0,"score":6,"author":"SilverMeteor9798","body":"作为州交通部长,Gladys 的几乎所有新闻稿都包含了内容关于自由主义者是如何“继续工作”并指责工党的。这不一定是错误的,只是过了一段时间后变得令人厌烦了
成功的一行看起来像这样:
{"created_utc":"1430438400","ups":4,"subreddit_id":"t5_378oi","link_id":"t3_34di91","name":"t1_cqug90g","score_hidden":false "author_flair_css_class":null,"author_flair_text":null,"subreddit":"soccer_jp","id":"cqug90g","removal_reason":null,"gilded":0,"downs":0,"archived":false,"author":"rx109","score":4,"retrieved_on":1432703079,"body":"\u304f\u305d\n\u8aad\u307f\u305f\u3044\u304c\u8cb7\u3063\u305f\u3089\u8ca0\u3051\u306a\u6c17\u304c\u3059\u308b\n\u56f3\u66f8\u9928\u306b\u51fa\u306d\u30fc\u304b\u306a","杰出":null,"编辑":false, “争议”:0,“parent_id”:“t3_34di91”
老实说,我现在更困惑了,但它看起来确实以所有对象的 "
结尾。所以要么它没有结束,要么有一个字符不能被解析?
EDIT3 - 已解决
我假设文件是完整的,但我猜是下载它时出错,文件被截断,最后一个条目是不完整的 JSON 对象。所以只需删除该条目即可解决问题。
感谢大家的帮助
最佳答案
正如我在 EDIT2 中解释的那样,我打印出了给我带来麻烦的行,发现它没有以 结尾,而每个 JSON 对象都应该以
结尾。然后我进入文件,通过简单的搜索检查了给我带来麻烦的确切行,我发现该行不仅被截断了,而且它也是我文件的最后一行。
当我下载或解压这个文件时肯定有错误,而且它似乎被缩短了。这反过来引发了我在没有似乎有效的解决方案的情况下遇到的错误。
对于遇到此错误且 .replace() 解决方案不起作用的任何人:尝试查看您的数据并确保确实存在可替换或编辑的内容。就我而言,在下载或提取过程中出现截断错误,这使得此类解决方案变得不可能。
非常感谢 abarnert、Michael Robellard 和 Anton Kachurin
关于python json.loads 未终止的字符串错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49284203/