AttributeError("模块'名称'没有属性' def name'",)

时间:2018-05-20 13:27:34

标签: python

我正在创建包含不同文件的虚拟操作系统,例如boot.pyRun.py

它工作了一段时间,直到我输入:

if Run.run == 0:
        error() 
    else:
        start()

没有错误说红线或任何错误。现在我收到了这个错误:

AttributeError("module 'boot' has no attribute 'bootup'",)

以下是代码:

boot.py

#Imports
import Run

#Varibles
name = "PyOS"
version = 1
creator = "© Dragon Softwares"

def bootup(run):
    if Run.run == 0:
        error() 
    else:
        start()


def start():
        print("Starting PyOS")
        print("Version ", version)

def error():
    print("Please Run 'Run.py' To bootup the system")

bootup()

Run.py

#Imports
import time
import boot

#Varibles
run = 0

def main():
    run = 1
    time.sleep(0.1)
    boot.bootup
main()

1 个答案:

答案 0 :(得分:1)

您有循环导入。不要value(.+) 导入 s.replaceAll("(\\G(?!^)|value=)([^\\\\\\s]*)[\\s\\\\]+", "$1$2") ,反之亦然。

现在发生的事情是:

  • boot作为Run模块执行。
    • 到达并执行了行Run.py
    • 之前尚未导入
    • __main__,因此找到import boot并将其加载为boot模块。
      • 到达并执行了行boot.py
      • 之前尚未导入
      • boot,因此找到import Run并将其加载为Run模块。 注意Run.py Run 并不重要
        • 到达并执行了行Run.py
        • __main__已被导入,因此用于在import boot模块中设置名称boot
        • boot模块命名空间(RunRun)中设置了各种其他名称。
        • 到达并执行了行run
          • main函数引用main(),但尚未存在,因为main()模块顶级代码从未到达boot.bootup行。

不是导入boot,而是将def bootup(run):值作为参数传递给Run函数:

run

另外,请勿在{{1​​}}模块的末尾拨打boot。导入def main(): run = 1 time.sleep(0.1) boot.bootup(run) 时,该函数调用将被执行,并且没有意义。如果要显示错误消息,请使用bootup()警卫:

boot

如果您将boot作为脚本运行,则if __name__ == '__main__':测试才会成立。