我在一个模块中加载一个pickle文件时有些麻烦,该模块与我腌制文件的模块不同.我知道以下线程:无法使用pickle和multipile模块加载文件.我已经尝试了将类导入到模块中的建议解决方案,我正在取消我的文件,但它一直给我同样的错误:
AttributeError: Can't get attribute 'Document' on <module '__main__' from ''>
我想要做的基本结构:
Util文件,用于pickles和unpickles对象,utils.py:
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)
Run Code Online (Sandbox Code Playgroud)
文件定义了Document对象并调用了save util方法,class_def.py:
import utils
class Document(object):
data = ""
if __name__ == '__main__':
doc = Document()
utils.save_document(doc)
Run Code Online (Sandbox Code Playgroud)
调用load util方法的文件,process.py:
import utils
if __name__ == '__main__':
utils.load_document(file_path)
Run Code Online (Sandbox Code Playgroud)
运行process.py会给出上面提到的AttributeError.如果我将class_def.py文件导入process.py并运行其原始线程中提到的main方法,它可以工作,但我希望能够单独运行这两个模块,因为class_def文件是一个预处理步骤,需要相当一段时间 我该怎么解决这个问题?
我正在编写一个循环方法,用于向索引向前或向后移动索引.以下代码用于向后循环:
(i-1)%list_length
Run Code Online (Sandbox Code Playgroud)
在这种情况下,i属于类型usize,这意味着它是无符号的.如果i等于0,则会导致"尝试减去溢出"错误.我尝试使用正确的转换方法来解决此问题:
((i as isize)-1)%(list_length as isize)) as usize
Run Code Online (Sandbox Code Playgroud)
这导致整数溢出.
我理解错误发生的原因,目前我通过检查索引是否等于0来解决问题,但我想知道是否有某种方法可以通过将变量转换为正确的类型来解决它.