我有Python 3.6。我想从另一个名为“run.py”的 python 文件执行名为“operation.py”的 python 文件。
In operation.py
I do from cStringIO import StringIO
。 PyCharm 向我显示一条警告,指出没有名为 StringIO 的模块。我知道从 python3 开始我必须从 io.import StringIO 模块导入 StringIO 模块。然而,当我使用这个输入时,这个模块的功能就不再起作用了。
虽然有警告from cStringIO import StringIO
,代码仍然有效(我知道这个导入确实有效,因为我试图将其作为注释,但它无法运行)。问题是,当我尝试通过“run.py”文件运行该文件时,它无法运行并打印以下消息:ModuleNotFoundError: No module named 'cStringIO'
.
我尝试用这个PyCharm 中未解决的参考问题 https://stackoverflow.com/questions/21236824/unresolved-reference-issue-in-pycharm但这没有帮助。
为什么“operation.py”会通过警告运行,但“run.py”不会?我该如何解决这个问题?
操作.py:
from cStringIO import StringIO
str_io = StringIO()
g = Generator(str_io, False)
# There is a full code here...
run.py:
import operation
def main():
operation
The operation.py
有警告但运行良好,run.py 失败。
我想你正在寻找io https://docs.python.org/3/library/io.html#io.StringIOPython 3.x 中的模块。cStringIO
(这是一个 Python 2 模块,是更快的版本StringIO
, see here https://docs.python.org/2/library/stringio.html#module-cStringIO)被替换为io
,以及许多其他变化。看here https://docs.python.org/3/whatsnew/3.0.html?highlight=cstringio了解更多相关信息。
历史记录:这就是我们不再两者兼得的原因cStringIO
and StringIO
:
Python 2.x 中的一种常见模式是使用纯 Python 实现的一个模块版本,以及作为 C 扩展实现的可选加速版本;例如,pickle 和 cPickle。这给这些模块的每个用户带来了导入加速版本和回归纯 Python 版本的负担。在Python 3.0中,加速版本被认为是纯Python版本的实现细节。用户应始终导入标准版本,该版本会尝试导入加速版本并回退到纯 Python 版本。 pickle / cPickle 对接受了这种处理。配置文件模块在 3.1 的列表中。 StringIO模块已经变成了io模块中的一个类。 (Source https://docs.python.org/3/whatsnew/3.0.html#library-changes)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)