使用调试器与不使用调试器时的代码行为不同

问题描述 投票:0回答:1

我有一个可迭代的对象,并实现了适当的 lengetitem 方法。

我将此对象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

我很难理解这里发生的事情。

我检查了可迭代方法的定义,并且由于它无需调试器即可工作,因此我没有看到任何线索。

python pytorch multiprocessing pickle vscode-debugger
1个回答
0
投票

这是 VSC 调试器的常见行为,我始终建议不要使用。基本上,这个工具包装了对许多库的许多不同调用,我不会在这里详细介绍。

综上所述,将您的 IDE 更改为 PyCharm,它比 VSC 更可靠、更高效,原因很多,这里不再赘述。您可以在此处找到资源,详细介绍了他们拥有的许多“令人惊叹”的想法。

如果您想了解此错误,这是由于 VSC 调试器处理 pickle 文件导致的,它重新初始化了可迭代对象中包含的方法 - 本身并不可怕。对于像您这样的某些特定情况,这是一个可怕的错误。

© www.soinside.com 2019 - 2024. All rights reserved.