将Python2.7脚本迁移至3.6时遇'module is not callable'错误求助
嘿,别担心,这个问题在 Python 2 迁移到 Python 3 的过程中挺常见的,我来帮你理清楚!
先看你原来的 Python 2.7 代码:
from Queue import Queue self.queue = Queue()
在 Python 2 里,Queue 是一个模块,里面的 Queue(首字母大写)才是你需要实例化的队列类。
到了 Python 3,这个模块的名字改成了小写的 queue,但里面的队列类依然叫 Queue(首字母大写)。你的错误在于:导入 queue 模块后,直接尝试调用 queue()——但 queue 是模块本身,不是可调用的类,所以才会抛出 module is not callable 错误!
给你两种正确的写法,任选其一就行:
方法一:直接导入 Queue 类(和你 Python 2 的写法最接近)
from queue import Queue self.queue = Queue()
只是把模块名从大写的 Queue 改成了小写的 queue,逻辑和你原来的代码完全一致。
方法二:导入整个 queue 模块,通过模块访问 Queue 类
import queue self.queue = queue.Queue()
这里要注意是 queue.Queue(),而不是 queue()——前者是调用模块里的队列类创建实例,后者是错误地把模块当成函数调用了。
简单总结:Python 3 里 queue 是模块,queue.Queue 才是你需要的队列类,别把模块和类搞混就好啦!
内容的提问来源于stack exchange,提问作者kpopguy
相关产品推荐
相关产品推荐

