如何使用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
相关产品推荐
相关产品推荐

