【问题标题】:Python Modules (modulename referenced before assignment)Python 模块(分配前引用的模块名)
【发布时间】:2012-03-31 03:54:29
【问题描述】:

我在 main() 脚本 (getdata.py) 所在的目录中有一个 vm.py。在getdata.py,我有

import vm
...
x = vm.Something()

然后python抱怨

UnboundLocalError: local variable 'vm' referenced before assignment

这是为什么呢?导入时没有错误。

更新

我发现如果我这样做了

from vm import * 

相反,它起作用了。同样对于我制作的另一个文件/模块,一个简单的import 可以工作。我将完整代码上传到 GitHub Gist https://gist.github.com/2259298

【问题讨论】:

  • 就其本身而言,应该可以。您的代码中可能还有其他对 vm 的引用,您在 ... 部分中删除了这些引用,因为您认为它们不相关,但实际上它们是相关的。参见,例如,this questionthis one
  • @DSM,更新了帖子,其中包含关于要点的观察和完整代码 (gist.github.com/2259298)
  • 命令行参数永远不会在驼峰式中完成; --numReferences 通常会使用 --num-references--references
  • @ChrisMorgan,感谢您告诉我 :)

标签: python python-3.x


【解决方案1】:

在您的 main 函数中,您有一行 vm = VirtualMemory(args['numFrames'], algo)。这样做的结果是 Python 将 vm 识别为函数内部的局部变量,因此当您尝试访问 vm,即 vm 模块时,在本地为其赋值之前,它会抱怨您没有给它赋值。

结果是您应该将变量 vm 或模块 vm 重命名为其他名称。

(最后一件事:避免使用 from X import * 语句,它们会使调试变得困难;列出您要明确导入的内容。无论如何,您不想导入像 main 这样的名称。)

【讨论】:

    猜你喜欢
    • 2014-08-13
    • 1970-01-01
    • 2012-05-05
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 1970-01-01
    • 2014-06-30
    相关资源
    最近更新 更多