You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在循环解析JSON时实现错误检查?处理TVmaze API返回的None对象

处理TVmaze API JSON中的None对象,避免循环中断

嘿,我完全懂你碰到的糟心事——遍历TVmaze返回的JSON数据时,某个image字段突然变成了None,直接用'medium' not in images判断会触发TypeError,导致整个循环卡壳,对吧?其实问题出在你没先判断images本身是不是None,直接对None做字典操作肯定会报错。下面给你几种靠谱的解决办法:

方法1:先检查None,再判断键是否存在

这是最直观的方式,先确认images不是None,再去检查里面的键:

# 假设tvmaze_data是你从API拿到的JSON列表
for show in tvmaze_data:
    images = show.get('image')  # 用get避免show里没有'image'键的情况
    # 先判断images是否为None,再检查是否缺少'medium'键
    if images is None or 'medium' not in images:
        print("跳过该对象:image为None或缺少medium字段")
        continue
    # 走到这里说明images是有效的字典,且存在medium字段
    medium_img_url = images['medium']
    # 接下来处理你的业务逻辑,比如存储URL
    print(f"获取到中等尺寸图片:{medium_img_url}")

方法2:用try-except捕获异常

如果不想写太多判断,也可以直接用异常捕获来处理,把可能出错的代码包在try块里:

for show in tvmaze_data:
    try:
        images = show['image']  # 这里如果show没有'image'键会触发KeyError,也可以换成show.get('image')
        medium_img_url = images['medium']
        # 正常处理逻辑
        print(f"获取到中等尺寸图片:{medium_img_url}")
    except (TypeError, KeyError):
        # TypeError:当images是None时,访问images['medium']会触发
        # KeyError:当images是字典但没有'medium'键时触发
        print("跳过该对象:image无效或缺少medium字段")
        continue

方法3:链式get调用(更简洁)

利用字典的get()方法可以返回默认值的特性,链式调用直接获取结果,避免嵌套判断:

for show in tvmaze_data:
    # 如果show没有'image'键,或者image是None,或者image没有'medium'键,都会返回None
    medium_img_url = show.get('image', {}).get('medium')
    if medium_img_url is None:
        print("跳过该对象:无法获取medium图片")
        continue
    # 处理逻辑
    print(f"获取到中等尺寸图片:{medium_img_url}")

这里show.get('image', {})的意思是:如果show里没有'image'键,就返回一个空字典,这样后面的.get('medium')就不会因为None报错了——空字典调用get会返回None,刚好符合我们的判断条件。

为什么你之前的写法会报错?

当images是None时,'medium' not in images相当于在一个None对象上执行in操作,而None既不是字典也不是可迭代对象,Python会直接抛出TypeError: argument of type 'NoneType' is not iterable,所以必须先判断images是否为None,再进行后续的字典操作。

内容的提问来源于stack exchange,提问作者TonyH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:48:47