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

如何处理NoneType无attrs属性问题:遇空值跳过函数执行

解决BeautifulSoup查找元素为None时跳过后续代码的问题

嘿,这个场景太常见了!用BeautifulSoup的时候链式调用很容易踩这个NoneType的坑,我来给你几个靠谱的解决方案。

核心问题拆解

你原来的代码bs4.find("div", {'class': "clock"}).attrs['data-code']会报错,是因为当find()找不到匹配的div时,会返回None,而None没有attrs属性,直接访问就会抛出AttributeError。所以关键是先判断查找结果是否存在,再执行后续操作。

方案1:分步判断(最直观)

把链式调用拆成两步,先获取元素,再判断是否为None,只有存在时才去拿data-code:

# 先获取目标div元素
clock_div = soup.find("div", {'class': "clock"})
# 检查元素是否存在
if clock_div is not None:
    # 确认存在后再访问attrs属性
    data_code = clock_div.attrs['data-code']
    # 这里写你需要用data_code执行的后续代码
    print(f"获取到data-code: {data_code}")
else:
    # 找不到元素时直接跳过,或者执行其他逻辑
    pass

方案2:用get()方法更安全(兼容属性不存在的情况)

如果目标div存在,但可能没有data-code属性,直接用attrs['data-code']还是会报错。这时候用get()方法更稳妥,它会在属性不存在时返回None而不是抛出异常:

clock_div = soup.find("div", {'class': "clock"})
if clock_div:
    # 用get()获取属性,不存在则返回None
    data_code = clock_div.get('data-code')
    if data_code is not None:
        # 只有拿到有效data-code时才执行后续代码
        print(f"获取到data-code: {data_code}")
    else:
        # 元素存在但没有data-code属性时跳过
        pass
else:
    # 元素不存在时跳过
    pass

方案3:用海象运算符简化代码(Python 3.8+)

如果你用的是Python 3.8及以上版本,可以用海象运算符:=把判断和赋值合并,让代码更简洁:

# 一步完成元素查找和存在性判断
if clock_div := soup.find("div", {'class': "clock"}):
    # 再一步完成属性获取和有效性判断
    if data_code := clock_div.get('data-code'):
        # 执行后续代码
        print(f"获取到data-code: {data_code}")

这样不管是找不到div,还是div没有data-code属性,都会直接跳过后续的代码逻辑,不会中断程序执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:40:19