簡體   English   中英

沒有名為 StringIO 的模塊

[英]no module named StringIO

我有 python 3.6。 我想從另一個名為“run.py”的python文件中執行名為“operation.py”的python文件。

operation.py我做from cStringIO import StringIO PyCharm 向我顯示了一個警告,指出沒有名為 StringIO 的模塊。 我知道從 python3 開始,我必須從 io 導入 StringIO 模塊。 但是,當我使用此導入時,該模塊的功能不再起作用。

盡管from cStringIO import StringIO有警告,但代碼仍然有效(我知道這個導入確實有效,因為我試圖將其設為注釋但它無法運行)。 問題是,當我嘗試通過 'run.py' 文件運行此文件時,它無法運行並打印以下消息: ModuleNotFoundError: No module named 'cStringIO'

我嘗試在 PyCharm 中使用這個未解決的參考問題,但沒有幫助。

為什么 'operation.py' 會運行警告,但 'run.py' 不會? 我該如何解決這個問題?

操作.py:

    from cStringIO import StringIO


    str_io = StringIO()
    g = Generator(str_io, False)
    # There is a full code here...

運行.py:

    import operation


    def main():
        operation

operation.py有警告但運行良好,run.py 失敗。

我認為您正在尋找 Python 3.x 中的io模塊。 cStringIO (這是一個 Python 2 模塊,它是StringIO的更快版本,請參見此處)已被io替換,並進行了許多其他更改。 有關更多信息,請參見此處

歷史記錄:這就是我們不再同時擁有cStringIOStringIO

Python 2.x 中的一個常見模式是用純 Python 實現模塊的一個版本,以及作為 C 擴展實現的可選加速版本; 例如,pickle 和 cPickle。 這給這些模塊的每個用戶帶來了導入加速版本和使用純 Python 版本的負擔。 在 Python 3.0 中,加速版本被視為純 Python 版本的實現細節。 用戶應該始終導入標准版本,它會嘗試導入加速版本並回退到純 Python 版本。 pickle / cPickle 對接受了這種處理。 配置文件模塊在 3.1 的列表中。 StringIO 模塊已經變成了 io 模塊中的一個類。 來源

使用這個:

 try:
    from StringIO import StringIO
 except ImportError:
    from io import StringIO

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM