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

遍历foo.py模块内置属性时遇AttributeError问题咨询

问题原因与解决办法

这问题其实是Python属性访问机制的一个常见坑——你混淆了字面量属性名和动态变量对应的属性名!

让我拆解一下:

  • 当你写foo.attribute的时候,Python不会把它当成“变量attribute的值对应的属性”,而是直接去foo模块里找一个名叫"attribute"的属性——但你的模块里根本没有这个属性,自然就报AttributeError了。
  • 你用dir(foo)遍历出来的attribute是字符串类型(比如"__name__"、"__doc__"这些),它只是属性的名字,不是属性本身。

那正确的打开方式是什么?用Python内置的getattr()函数!这个函数专门用来通过字符串形式的属性名动态获取对象的属性。

修改后的代码应该是这样:

import foo
for attribute in dir(foo):
    print(getattr(foo, attribute))

如果想同时看到属性名和对应的值,还可以优化成:

import foo
for attribute in dir(foo):
    print(f"{attribute}: {getattr(foo, attribute)}")

简单总结:

  • 用.访问属性时,属性名必须是硬编码的字面量;
  • 要通过变量动态获取属性,就用getattr(obj, attr_name)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:24:03