ValueError list.remove x x not in list item definitely exists

2024-05-16 18:59:00 发布

您现在位置:Python中文网/ 问答频道 /正文

它正确地删除了第一个循环中的所有内容,但是在删除第二个循环中的快照时抛出了这个,知道为什么吗?我可能一直在运行Python3,现在又回到了2.7,这是我的问题吗?它似乎从列表中删除了一个项目,然后再也无法删除。在

for i in range(0, numOfSnap):
            tempName = baseVv.name + ".ro" + str(i)
            snapVv = baseVv.createSv(name=baseVv.name + ".ro" + str(i), svOptions="-ro -i %s" % x)  
            x += 1                                      
            dlog.info("Creating %s" % tempName)
            baseVv.name + ".rw" + str(i)
            tempName = baseVv.name + ".rw" + str(i)
            rwSnap = snapVv.createSv(name=baseVv.name + ".rw" + str(i), svOptions="-i %s" % x)
            x += 1 
            snapRwVlun = self.cluster.createVlun(vv=rwSnap, host=host)
            dlog.info("Creating %s" % tempName)
            rwSnapList.append(rwSnap)
            vlunList.append(snapRwVlun)
            ## delay random seconds between RO snapshot creation
            time.sleep(random.randint(5,30))

        snapRoList = baseVv.snapSvList

        dlog.info("Stopping IO on VV")
        self.cluster.stopSnapIOOnHosts()

        dlog.info("Starting IO on snaps and VV")           
        self.cluster.startSnapIOOnHosts()
        dlog.info("Sleep 60 seconds for IO to go through")

        time.sleep(60)

        dlog.info("Stopping IO")
        self.cluster.stopSnapIOOnHosts()                       

        time.sleep(60)

        for vluns in vlunList:
            vluns.remove()

        dlog.info("Waiting 60 seconds")    
        time.sleep(60)

        ## randomly pick 1 rw snapshot to delete till removal of all snapshot
        for i in range(0, numOfSnap)[:]:
            snapIndex = random.randint(0, len(rwSnapList)-1)
            dlog.info("remove %s" % rwSnapList[snapIndex].name)
            roSnapshot =  rwSnapList[snapIndex]
            roSnapshot.remove()
            #self.cluster.waitForClusterIntegrated()
            ## remove it from object list
            rwSnapList.remove(roSnapshot)
            time.sleep(random.randint(5,10))

        ## randomly pick 1 ro snapshot to delete till removal of all snapshot
        for i in range(0, numOfSnap)[:]:
            snapIndex = random.randint(0, len(snapRoList)-1)
            dlog.info("remove %s" % snapRoList[snapIndex].name)
            roSnapshot =  snapRoList[snapIndex]
            roSnapshot.remove()
            #self.cluster.waitForClusterIntegrated()
            ## remove it from object list
            snapRoList.remove(roSnapshot)
            time.sleep(random.randint(5,10))

Tags: nameselfinfofortimesleeprandomremove
2条回答

你为什么要费劲从列表中删除它们呢?你只想在所有的机器上调用.remove()?在

def removeAll(snapshots, minsleep=5, maxsleep=10):
    random.shuffle(snapshots)
    for snapshot in snapshots:
        dlg.info("remove %s" % snapshot.name)
        snapshot.remove()
        time.sleep(random.randint(minsleep, maxsleep))

removeAll(rwSnapList)
removeAll(roSnapList)

与其从快照列表中随机选取一个索引,随机移动列表一次并从该无序列表中弹出项目:

shuffledSnapList = snapRoList[:]
random.shuffle(shuffledSnapList)

while shuffledSnapList:
    roSnapshot = shuffledSnapList.pop()

通过对要从中删除的列表使用while循环测试,可以保证当列表为空时循环将终止。在

因为列表是无序排列的,所以按随机顺序处理这些项。在

相关问题 更多 >