在python中使用for循环时出现JSONDecodeError [重复]
Posted
技术标签:
【中文标题】在python中使用for循环时出现JSONDecodeError [重复]【英文标题】:JSONDecodeError when using for loop in python [duplicate] 【发布时间】:2021-05-29 15:55:50 【问题描述】:我一直在尝试执行一些 API 查询来获取我的 DF 中的一些缺失数据。我正在使用 grequest 库发送多个请求并为响应对象创建一个列表。然后我使用 for 循环将响应加载到 json 中以检索丢失的数据。我注意到的是,当使用 .json() 从列表中直接使用 notition list[0].json() 加载数据时,它工作正常,但是当尝试读取列表然后将响应加载到 json 中时,此错误出现:JSONDecodeError: Expecting value: line 1 column 1 (char 0)
这是我的代码:
import requests
import json
import grequests
ls = []
for i in null_data['name']:
url = 'https://pokeapi.co/api/v2/pokemon/' + i.lower()
ls.append(url)
rs = (grequests.get(u) for u in ls)
s = grequests.map(rs)
#This line works
print(s[0].json()['weight']/10)
for x in s:
#This one fails
js = x.json()
peso = js['weight']/10
null_data.loc[null_data['name'] == i.capitalize(), 'weight_kg'] = peso
<ipython-input-21-9f404bc56f66> in <module>
13
14 for x in s:
---> 15 js = x.json()
16 peso = js['weight']/10
17 null_data.loc[null_data['name'] == i.capitalize(), 'weight_kg'] = peso
JSONDecodeError: Expecting value: line 1 column 1 (char 0)
【问题讨论】:
【参考方案1】:一个(或多个)元素为空。
所以:
...
for x in s:
if x != ""
js = x.json()
peso = js['weight']/10
null_data.loc[null_data['name'] == i.capitalize(), 'weight_kg'] = peso
...
或
...
for x in s:
try:
js = x.json()
peso = js['weight']/10
null_data.loc[null_data['name'] == i.capitalize(), 'weight_kg'] = peso
except json.JSONDecodeError as ex: print("Failed to decode(%s)"%ex)
...
第一个检查 x 是否为空字符串,而另一个尝试解码每个字符串,但出现异常时仅打印错误消息而不是退出。
【讨论】:
以上是关于在python中使用for循环时出现JSONDecodeError [重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 for 循环中使用 str.split 时出现“ValueError 太多值无法解包”
Java - 在 for 循环中使用“继续”时出现未处理的异常错误?
使用数组 + for 循环时出现“线程主 java.lang.arrayindexoutofboundsexception 中的异常”