我在加載pickled文件的模塊與我在pickled文件的模塊不同時遇到了一些麻煩。我知道以下線程:Unable to load files using pickle and multipile modules。我試圖導入全班分成我在哪裏取儲存我的文件模塊的提出的解決方案,但它不斷給我同樣的錯誤: AttributeError: Can't get attribute 'Document' on <module '__main__' from ''>
在不同的文件中加載pickled對象 - 屬性錯誤
的什麼,我試圖做的基本結構:
其中文檔對象被定義並且保存util的方法import pickle
def save_document(doc):
from class_def import Document
write_file = open(file_path, 'wb')
pickle.dump(doc, write_file)
def load_document(file_path):
from class_def import Document
doc_file = open(file_path, 'rb')
return pickle.load(doc_file)
文件被調用時,class_def.py:該泡菜和unpickles目的,utils.py
的Util文件
文件,其中負載UTIL方法被調用,process.py:
import utils
if __name__ == '__main__':
utils.load_document(file_path)
運行process.py給出提到AttributeError的。如果我將class_def.py文件導入process.py並運行其原始線程中提到的main方法,但是我希望能夠分別運行這兩個模塊,因爲class_def文件是一個預處理步驟,需要相當一段時間。我怎麼能解決這個問題?
不回答你的問題,但你應該在你打開它們後關閉文件處理程序,或者乾脆用['with'](http://effbot.org/zone/python-with-statement .htm)。 – Itay
當一個文件以'__main__'的形式運行時,其中定義的任何東西都被作爲'__main__'模塊的成員來醃製,所以如果你正在加載到另一個文件中,它就會失敗。來自<__main__>模塊的東西最快的修復是從<這個模塊名稱> import *',但我不建議在生產代碼中使用它。 –
[python pickle上的命名空間](http:// stackoverflow。 com/q/7928450/5827215),但我認爲可能有更好的線程標記爲dup –