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

已做非空判断仍触发TypeError: NoneType对象不可下标访问

解决爬虫中track['duet']['handle']的空值/不存在报错问题

你当前的代码只判断了handle是否为None,但忽略了两种更先触发错误的场景:

  • track中不存在'duet'键,直接用track['duet']会抛出KeyError
  • track['duet']本身就是None,此时取handle会抛出TypeError(NoneType无法通过索引取值)

这两种情况都会让你的判断代码直接崩溃,根本走不到else分支。下面是几种可行的修复方案:

方案1:逐层安全判断(最直观)

先确认duet存在且不为None,再检查handle:

def create_song_list(track):
    duet = track.get('duet')  # 用get避免键不存在的KeyError,不存在则返回None
    if duet is not None and duet.get('handle') is not None:
        duetpartner = duet['handle']
    else:
        duetpartner = 'Solo'
    return {
        'Duet_partner': duetpartner
    }

方案2:嵌套get()一步到位(最简洁)

利用dict.get()的默认值特性,逐层兜底:

def create_song_list(track):
    # 若duet不存在/为None,返回空字典;再取handle,不存在/为None则返回'Solo'
    duetpartner = track.get('duet', {}).get('handle', 'Solo')
    return {
        'Duet_partner': duetpartner
    }

方案3:异常捕获(覆盖所有意外情况)

如果不确定还有其他潜在错误,直接捕获异常:

def create_song_list(track):
    try:
        duetpartner = track['duet']['handle']
        # 额外处理handle本身为None的情况
        if duetpartner is None:
            duetpartner = 'Solo'
    except (KeyError, TypeError):
        # 捕获键不存在或duet为None的错误
        duetpartner = 'Solo'
    return {
        'Duet_partner': duetpartner
    }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:40:24