大创踩坑记录(连续更新)

大创项目踩坑记录

  • python在导入json包后,用json.loads(string)读取json对象转换成python中的字典dict的时候,该对象应该是一个完整的字符串,字符串内的字符要合法,例如:若使用vscode中_Beautify Json_ 插件,为只有一行的json增加横多换行符"\n"来增加人类的易读性,在用data_dictionary = json.loads(obj)的时候会报错,因为loads函数不识别不合法(json)字符串。我遇到的报错如下

看traceback说缺东西,缺一个value,第二行调用json.loads()出错了

JSONDecodeError: Expecting value: line 1 column 1 (char 0)
---------------------------------------------------------------------------
JSONDecodeError Traceback (most recent call last)
/tmp/ipykernel_4336/3512504032.py in
1 source_str = source.read()
----> 2 source_data = json.loads(source_str)
3 source_data

接着看调用栈

首先是loads函数的签名,344~345行都是说那个函数签名里的东西要为非空。看345的最后是右括号冒号结尾,推测是一个if语句,好奇的可以根据下面文件地址找找<Path>/json/__init__.py里面是啥,我是linux系统,win和mac估计也差不多,要学会找路径。
继续,问题出在346行,说明前面非空的if语句满足了,是最后_default_decoder.decode(s)这里出问题了,到这里说明,我写的代码没有问题,是解码decode的时候出问题。大概率是json文件本身的文本问题。

/usr/lib/python3.9/json/init.py in loads(s, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
344 parse_int is None and parse_float is None and
345 parse_constant is None and object_pairs_hook is None and not kw):
–> 346 return _default_decoder.decode(s)
347 if cls is None:
348 cls = JSONDecoder

继续往下看

避免篇幅冗余(虽然已经很罗嗦了),来到decoder.py这里发现是337行出问题

/usr/lib/python3.9/json/decoder.py in decode(self, s, _w)
335
336 “”"
–> 337 obj, end = self.raw_decode(s, idx=_w(s, 0).end())
338 end = _w(s, end).end()
339 if end != len(s):

非常明了了,是json文件格式的问题。但是具体355这句话的深层含义我目前不是特别理解,可能要查看官方文档才能理解

/usr/lib/python3.9/json/decoder.py in raw_decode(self, s, idx)
353 obj, end = self.scan_once(s, idx)
354 except StopIteration as err:
–> 355 raise JSONDecodeError(“Expecting value”, s, err.value) from None
356 return obj, end

报错内容:JSONDecodeError: Expecting value: line 1 column 1 (char 0)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值