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

检测self.rowdict存在性触发AttributeError,该如何正确检测?

解决方案

问题根源

你遇到的AttributeError不是因为rowdict是None,而是这个属性在GML32Parser实例中根本没有被定义。直接访问self.rowdict时,Python找不到该属性就会抛出错误,不管你是直接判断还是和None比较。

可行方案

方案1:用hasattr()先检测属性是否存在

先判断实例是否拥有该属性,再判断属性值是否非空,避免直接访问不存在的属性:

if hasattr(self, 'rowdict') and self.rowdict is not None:
    logger("self.rowdict = " + str(self.rowdict))

方案2:提前在类的初始化方法中定义属性

在GML32Parser类的__init__方法里,提前把rowdict初始化为None,后续访问时就不会触发属性不存在的错误:

class GML32Parser(HTMLParser):
    def __init__(self):
        super(GML32Parser, self).__init__()
        self.rowdict = None  # 提前初始化属性
        # 其他初始化代码...

之后就可以正常使用if self.rowdict is not None:进行判断。

方案3:用try-except捕获异常

如果无法提前初始化属性,也可以通过异常捕获处理属性不存在的情况:

try:
    if self.rowdict is not None:
        logger("self.rowdict = " + str(self.rowdict))
except AttributeError:
    # 这里可以写属性不存在时的处理逻辑,比如跳过或者初始化
    pass

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 04:42:35