AttributeError:“模块”对象没有属性

新手上路,请多包涵

我有两个 python 模块:

一个.py

 import b

def hello():
  print "hello"

print "a.py"
print hello()
print b.hi()

b.py

 import a

def hi():
  print "hi"

当我运行 a.py 时,我得到:

 AttributeError: 'module' object has no attribute 'hi'

错误是什么意思?我如何解决它?

原文由 Stephen Hsu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 299
2 个回答

你有相互的顶级进口,这几乎总是一个坏主意。

如果你真的必须在 Python 中进行相互导入,那么方法是在一个函数中导入它们:

 # In b.py:
def cause_a_to_do_something():
    import a
    a.do_something()

现在 a.py 可以安全地执行 import b 而不会引起问题。

(乍一看,似乎 cause_a_to_do_something() 效率非常低,因为每次调用它时它都会执行 import ,但实际上导入工作只会在第一次完成。第二次及以后导入模块时,这是一个快速操作。)

原文由 RichieHindle 发布,翻译遵循 CC BY-SA 2.5 许可协议

当无意中将模块命名为与标准 Python 模块之一同名时,我也看到了这个错误。例如,我有一个名为 commands 的模块,它也是一个 Python 库模块。这被证明很难追踪,因为它在我的本地开发环境中工作正常,但在 Google App Engine 上运行时失败并出现指定错误。

原文由 lucrussell 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题