首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中使用for循环时的JSONDecodeError

在python中使用for循环时的JSONDecodeError
EN

Stack Overflow用户
提问于 2021-02-27 14:35:43
回答 1查看 179关注 0票数 0

我一直在尝试做一些API查询,以便在我的DF中获得一些丢失的数据。我使用grequest库发送多个请求,并为响应对象创建一个列表。然后,我使用for循环在json中加载响应,以检索丢失的数据。我注意到的是,当使用.json()直接使用list.json()从列表中加载数据时,它可以正常工作,但是当尝试读取列表,然后将响应加载到json中时,会出现以下错误: JSONDecodeError: Expecting :第1列(char 0)

这是我的密码:

代码语言:javascript
复制
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
代码语言:javascript
复制
<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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-27 15:26:50

一个(或多个)元素为空。

所以:

代码语言:javascript
复制
...
for x in s:
    if x != ""
        js = x.json()
        peso = js['weight']/10
        null_data.loc[null_data['name'] == i.capitalize(), 'weight_kg'] = peso
...

代码语言:javascript
复制
...
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是否为空字符串,而另一个则试图对每个字符串进行解码,但在异常情况下,只打印错误消息而不是退出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66399871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档