Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ValueError:列表。删除(x):x不在列表中,项目肯定存在_Python - Fatal编程技术网

Python ValueError:列表。删除(x):x不在列表中,项目肯定存在

Python ValueError:列表。删除(x):x不在列表中,项目肯定存在,python,Python,它会正确地删除第一个循环中的所有内容,但在删除第二个循环中的快照时会抛出此内容,知道为什么吗?我可能一直在运行Python3,现在又回到了2.7,这可能是我的问题吗?它似乎从列表中删除了一项,但再也无法删除更多项 for i in range(0, numOfSnap): tempName = baseVv.name + ".ro" + str(i) snapVv = baseVv.createSv(name=baseVv.name + ".ro"

它会正确地删除第一个循环中的所有内容,但在删除第二个循环中的快照时会抛出此内容,知道为什么吗?我可能一直在运行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))

不要从快照列表中随机选取索引,而是将该列表无序排列一次,然后从该无序排列的列表中弹出项目:

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

while shuffledSnapList:
    roSnapshot = shuffledSnapList.pop()
通过在对要从中删除的列表进行循环测试时使用
,可以保证当列表为空时循环将终止


因为列表是随机排列的,所以项目是按随机顺序处理的。

为什么要麻烦地将它们从列表中删除,您只想在所有机器上调用
.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)

你能把你的问题简化成一个简单的(2行或3行)例子吗?看起来很多这样的代码不需要出现错误。你能给我们举一个简单的例子吗?或者至少告诉我们哪一行出错了,包括堆栈跟踪?我不会阅读所有代码并试图猜测你做错了什么。对不起,我只是向你展示了列表是如何设置的,当这一行被称为snapRoList.remove(roSnapshot)时会出现错误,但在它已经执行这一行一次之后。roSnapshot有什么值?为什么你认为这个特殊的值会破坏它?同时考虑一下SaaPROPELT包含的内容,我会尝试一下。