主人公:遍历字典的同时,删除字典中的项。(如果你使用的语言中有字典)
我这里就以Python中的字典为例,这也是我开始使用Python起,已经出现过两次这种错误了。
最近一次出错环境:我字典数据结构大概是这样,d = {'1':{'times':3, 'use':True}, '2':{'times':1, 'use':False}}。这个字典中'times'表示了,某种持续状态,在做了某种操作后,需要对此持续状态减1,并同时删除'times'为0的项,比如d['1']['times']最后减到0了,那么,就需要从d中删除d['1']。我大概就需要做这个操作。类似代码如下:
def clear_times(d):
for i in d:
d['i']['times'] -= 1
if d['i']['times'] < 1:
del d['i']
大家这下明白了吧,一运行这段代码片段,就会报:RuntimeError: dictionary changed size during iteration!
是呀。这种错,我在第一次遇到时,就出过这个错误,当时也知道了,这个错误是怎么导致的了,就是因为,在遍历字典时,又去改变了正在遍历的这个字典的长度,Python字典发现用户有这种操作时,就会抛出异常。
当时第一次出现这个错误时,已经记下来,并修改了。但是,没想到自己这次又出现这个错误了。看来自己对字典的操作不是非常熟悉,还是有漏点呀,这种错误可以说是最基础的,这是操作字典的常识,不光是Python中遇到的问题,其它语言也存在。
所以,今天在网上又搜了一下这种错误,发现了一篇很不错的文章,出处如下:
这篇文章讲很好,也很全、很透。大家可以好好看看,一定要熟记这些编程常识,不能在编程中再出现这种错误了,可能会因为这种错误,导致出其它更严重的错误,那就得不偿失了。
也希望这是我最后一次犯这种错了,勤练呀!