我有一个可迭代的对象,并实现了适当的 len 和 getitem 方法。
我将此对象pickle到“train_file.pth”pickle文件中。
然后,运行以下代码片段时:
with open(train_file_name, "rb") as file:
train_objects = pickle.load(file)
for object in train_objects :
object.set_variable(some_value, 0)
object.set_variable(some_other_value, 1)
对 set_variable 方法的每次调用都有效
迭代时出现以下错误:
list index out of range
File "C:\some_dir\my_file.py", line 225, in __getitem__
return self._objects[k]
File "C:\some_dir\my_other_file.py", line 236, in <module>
for object in train_objects:
IndexError: list index out of range
我很难理解这里发生的事情。
我检查了可迭代方法的定义,并且由于它无需调试器即可工作,因此我没有看到任何线索。
这是 VSC 调试器的常见行为,我始终建议不要使用。基本上,这个工具包装了对许多库的许多不同调用,我不会在这里详细介绍。
综上所述,将您的 IDE 更改为 PyCharm,它比 VSC 更可靠、更高效,原因很多,这里不再赘述。您可以在此处找到资源,详细介绍了他们拥有的许多“令人惊叹”的想法。
如果您想了解此错误,这是由于 VSC 调试器处理 pickle 文件导致的,它重新初始化了可迭代对象中包含的方法 - 本身并不可怕。对于像您这样的某些特定情况,这是一个可怕的错误。