python - 如果 else 最后失败并抛出关键错误 - python

标签 python json pandas numpy python-requests

这似乎以前工作得很好,但突然我的代码停止工作了。否则,两者都会成功运行,但最后会出现关键错误。

这里的数据来自名为 userdata 的 json。

这是代码示例 1:

if(userdata["id"] == "Stage1"):
    for j in range(len(userdata['Data'])):
        if(userdata['Data'][j]['user']==userName):
            address=str(processdata['Data'][j]['address'])
            addressInst = ''.join(filter(str.isalnum, address))
            print(addressInst)
        else:
            print('not available')

错误:

KeyError: 'user'

我从 API 获取的 json 中获取用户名,然后调用另一个 api 来更新其地址。我在此 if 语句之后调用另一个 API,但由于某些原因,我隐藏了此处的代码。

if(userdata['Data'][j]['user']==userName):

我能够成功调用 API,但最后我每次都会收到上述错误,因此我的函数无法运行。

我实际上想避免 if else,谁能告诉我如何保存匹配数据

userdata['Data'][j]['user']==userName

然后调用API来相应地更新数据,这样我就可以避免错误?

最佳答案

您正在尝试访问 JSON 中不存在的 key 。如果键不存在,使用get返回默认值:

if(userdata["id"] == "Stage1"):
    for data in userdata['Data']:
        if (data.get('user') == userName):
            address = data.get('address', [])
            addressInst = ''.join(filter(str.isalnum, address))
            print(addressInst)
        else:
            print('Not available')

或者没有 if ... else ... 的较短版本:

if(userdata["id"] == "Stage1"):
    for data in filter(lambda d: d.get('user') == userName, userdata['Data']):
        address = data.get('address', [])
        addressInst = ''.join(filter(str.isalnum, address))
        print(addressInst)

它的作用是:

  • filter 为列表中 lambda 返回 True 的项目返回一个迭代器
  • d.get('user') 如果在 d 中找不到键 'user',则返回 None,而不是出错。

除非您确定字典将包含键,否则最好调用 aDict.get(key, defaultValue) 以避免错误。

关于python - 如果 else 最后失败并抛出关键错误 - python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62489081/

相关文章:

python - Pycharm(免费版)和 Perforce 中的目录问题

Python 正则表达式未按预期工作

ios - 函数在 iOS 模拟器上运行速度比在 iPhone 上快

json - 如何在django中返回JSON

python - 从不同的列中取绝对值的最大值并过滤掉 NaN Python

python - 将变量从 python 传递到 mySQL 数据库

javascript - nodejs 中类似 c 的互斥量

javascript - 附加 JSON 对象编号 - 故障排除

python - 获取由另一列加权的标准化值计数?

python - 如何在 Pandas 数据框中查找哪些列包含任何 NaN 值