属性错误:'模块'没有属性'队列'。

8

我正在尝试导入Queue,但一直收到以下错误提示:

Traceback (most recent call last):
  File "threading.py", line 2, in <module>
    import Queue
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/Queue.py", line 5, in <module>
    import threading as _threading
  File "/Users/zaq/threading.py", line 10, in <module>
    queue = Queue.Queue()
AttributeError: 'module' object has no attribute 'Queue'

我正在使用链接中的代码Threading in python using queue

同时,我可以在Python解释器中导入和使用Queue。

我做错了什么?

1个回答

21

我的脚本名称是threading.py...我更改了它,现在一切都正常了。初学者错误。


是的,我正要添加一条评论建议您更改脚本名称,不过奇怪的是错误来自于 Queue.Queue() 行,我本来期望它在第一次尝试使用线程模块时就失败了。 - Andrew Clark
我同意。我认为 Queue.py 试图导入我所称呼的 threading.py 而非真正的 threading 脚本。奇怪的事情! - Clocker
这里实际上发生了一个循环导入——Queue 尝试 import threading,而threading 又导入了你的模块。然后你的模块尝试 import Queue 并使用 Queue.Queue(),但是 Queue 仍处于正在导入的中间状态,所以它还没有Queue 成员。 - abarnert
它导入你的模块而不是同名的stdlib模块的原因是当前工作目录(作为'''.')始终在sys.path中的stdlib目录之前。导入你的模块并运行其顶层代码的原因是你将你的模块作为脚本运行,所以它被加载为__main__而不是threading - abarnert
1
换句话说,如果你跟踪这个过程,就会发现有很多有趣的东西可以学习。但我不建议这样做,因为2.x版本的导入过程文档混乱不堪;等到你升级到3.3(或者...不要等待,立即升级),然后学习经过整理和精心记录的导入系统 - abarnert
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接