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

如何使用Beautiful Soup检测属性错误以避免程序崩溃?

解决Beautiful Soup中AttributeError的问题

嘿,我来帮你搞定这个报错!你遇到的AttributeError其实不是因为find_all返回了错误,而是**stock本身就是None**——也就是说你之前查找stock对应的元素时根本没找到,所以当你直接调用stock.find_all()时,就会触发这个错误,因为None对象没有find_all方法。你原来的判断逻辑完全走不通,因为异常在你调用find_all的瞬间就抛出来了,根本到不了判断那一步。

下面给你几个可行的解决方案:

方案一:先检查stock是否存在(推荐)

最直观且高效的方式是先确认stock不是None,再调用它的方法,同时还可以额外判断是否找到option元素:

# 先判断stock是否被成功找到
if stock is not None:
    all_sizes = stock.find_all("option")
    # 如果没找到任何option,也说明商品售罄
    if not all_sizes:
        print("Desired item has sold out")
    else:
        # 这里写你处理all_sizes的业务逻辑
        pass
else:
    # stock本身就没找到,说明商品可能不存在或已售罄
    print("Desired item has sold out")

方案二:更简洁的链式判断

如果你想让代码更紧凑,可以用三元表达式先处理stock,再统一判断结果:

all_sizes = stock.find_all("option") if stock is not None else []
if not all_sizes:
    print("Desired item has sold out")
else:
    # 处理你的尺寸数据逻辑
    pass

方案三:用try-except捕获异常(适合复杂场景)

如果你的代码可能存在多种异常情况,也可以用异常捕获的方式兜底:

try:
    all_sizes = stock.find_all("option")
    if not all_sizes:
        print("Desired item has sold out")
    else:
        # 处理逻辑
        pass
except AttributeError:
    # 当stock是None时,会触发这个异常
    print("Desired item has sold out")

另外补充个小提醒:你可以回头检查一下stock的来源(比如是不是用soup.find()查找的某个标签),如果stock经常是None,可能是你查找的标签名、属性和网页实际结构不匹配,得确认一下选择器是否正确哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:20:12