不能在遍历的时候往字典中新增、删除元素!!!
下面是我的python脚本,它需要遍历所有具有逻辑路径和直接磁盘的物理磁盘
如果我们找到了任何逻辑路径,那么我们得到了相应的物理磁盘,然后我们移除了逻辑部分,并将其对应的物理磁盘添加到检查字典中
check={
"/dev/disks/DISK2": "",
"/dev/disks/DISK4": "",
"/dev/disks/DISK5": "",
"/dev/disks/DISK1": "",
"/dev/disks/DISK6": "",
"/dev/disks/DISK3": "",
"/dev/sda": "/dev/sda"
}
logical_paths={
"/dev/disks/DISK2": "/ dev / sdc1",
"/dev/disks/DISK4": "/ dev / sdd2",
"/dev/disks/DISK5": "/ dev / sde1",
"/dev/disks/DISK1": "/dev/sdb4"
}
for a in check.keys():
print("*****")
print("disk is:"+a)
if a in logical_paths:
check[logical_paths[a]]=check[a]
check.pop(a,None)
print("####")
print(check)
但我的脚本的输出是:
*****
disk is:/dev/oracleasm/disks/DISK2
*****
disk is:/dev/oracleasm/disks/DISK4
*****
disk is:/dev/oracleasm/disks/DISK5
*****
disk is:/dev/oracleasm/disks/DISK1
*****
disk is:/ dev / sdc1
*****
disk is:/ dev / sdd2
*****
disk is:/ dev / sde1
*****
disk is:/dev/sdb4
为什么它要穿越disk6、disk3和SDA
对dict进行迭代时修改了它。这导致了底层结构的变化。如果您想明确地看到这一点,可以注释掉check.pop(a),然后您将得到一个错误RuntimeError: dictionary changed size during iteration。简而言之,您应该避免在迭代时修改dict的键。有关问题的详细解释,请参见:Modifying a Python dict while iterating over it
可以把新增、删除操作封装到另外一个函数中,然后使用循环调用该函数,实现遍历
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)