首页 > 解决方案 > 如何在迭代期间修复字典更改的大小:pygame 雷达

问题描述

我一直试图让这个 python 脚本使用超声波传感器作为雷达模拟。每次我运行代码时,它都会工作 3 秒,然后退出并返回错误:字典在迭代期间更改了大小。

我很困,不知道从哪里开始。我浏览了整个代码,找不到问题,更不用说:字典。也许只是我缺乏经验,但帮助将是可观的。完整的原始源代码可以在这里找到:https ://github.com/AmrMohamed-95/radar-simulation

pi@Pi01:~/radar-simulation/src $ python3 radar.py
pygame 1.9.4.post1
Hello from the pygame community. https://www.pygame.org/contribute.html
dictionary changed size during iteration
Radar Exit
pi@Pi01:~/radar-simulation/src $ 

它应该显示一个持续刷新的雷达,但它会在两圈后退出。

标签: pythonpygame

解决方案


它是 Python 2 代码,所以用 Python 2 运行它(而不是 Python 3,就像你一直在做的那样),例如

pi@Pi01:~/radar-simulation/src $ python radar.py

编辑

至于您观察到的错误,它发生在您在迭代元素时发出deladict元素,例如:

d = {x, str(x): for x in range(10)}

for k, v in d.items():
    if k == 7:
        del d[k]  # <--- error here!

这可能会导致不一致的行为,即使错误没有出现,也被认为是不好的做法。

要修复它,您应该重写代码以避免del ...

在那个代码库中,这似乎发生在display.py第 106 行


推荐阅读