Python PIL在内存中保留最后一个图像

Python PIL在内存中保留最后一个图像,python,python-3.x,python-imaging-library,Python,Python 3.x,Python Imaging Library,在我的代码中,我在一个csv文件中循环,对于每一行,都会根据其中一个值分配一个图像。如下所示: if 'V,S,M' in s.com: compic = Image.open('Com-VSM.png') elif "V,S" in s.com: compic = Image.open('Com-VS.png') elif "V,M" in s.com: compic = Image.open('Com-VM.png') elif "S,M" in s.com:

在我的代码中,我在一个csv文件中循环,对于每一行,都会根据其中一个值分配一个图像。如下所示:

if 'V,S,M' in s.com:
    compic = Image.open('Com-VSM.png')
elif "V,S" in s.com:
    compic = Image.open('Com-VS.png')
elif "V,M" in s.com:
    compic = Image.open('Com-VM.png')
elif "S,M" in s.com:
    compic = Image.open('Com-SM.png')
elif "V" in s.com:
    compic = Image.open('Com-V.png')
elif "S" in s.com:
    compic = Image.open('Com-S.png')
elif "M" in s.com:
    compic = Image.open('Com-M.png')
但是,我注意到,有时python会保留上一个循环中使用的图像,因此如果List[1]使用'Com-M.png',List[2]使用'Com-S.png',结果是,在生成图像时,List[2]会将'Com-S.png'叠加在'Com-M.png'上,有没有关于如何修复此问题的猜测

完整循环(垃圾收集器内容是严重清除内存的尝试):


在您的
中,如果。。。如果…
您忘记了一条
else
语句。所以,如果不满足任何条件,就不会在每个循环上设置compic变量

您只需添加一个
else
语句即可检查所有案例

如果没有,最好的做法是提出
未实现错误
,例如:

if 'V,S,M' in s.com:
    compic = Image.open('Com-VSM.png')
elif "V,S" in s.com:
    compic = Image.open('Com-VS.png')
elif "V,M" in s.com:
    compic = Image.open('Com-VM.png')
elif "S,M" in s.com:
    compic = Image.open('Com-SM.png')
elif "V" in s.com:
    compic = Image.open('Com-V.png')
elif "S" in s.com:
    compic = Image.open('Com-S.png')
elif "M" in s.com:
    compic = Image.open('Com-M.png')
else:
    raise NotImplementedError(s.com)

这样,如果在循环中重新指定一个名称,如
compic
,则更容易找到缺失的案例,它将始终是在循环顶部重新开始时的最后一个值。我的怀疑是,如果满足某个特定条件,它不会被分配到
if/elif
块中,而这正是让您感到不舒服的地方。在那里扔一个
else
,看看是否有一个你意想不到的极端情况。否则,您可能应该粘贴更多的代码,至少是包含
for
循环的部分。@LukasGraf已经发布了更多代码。请重新插入代码。不清楚什么在循环中,什么不在循环中。@LaurentPorte它被重新插入。希望有帮助
if 'V,S,M' in s.com:
    compic = Image.open('Com-VSM.png')
elif "V,S" in s.com:
    compic = Image.open('Com-VS.png')
elif "V,M" in s.com:
    compic = Image.open('Com-VM.png')
elif "S,M" in s.com:
    compic = Image.open('Com-SM.png')
elif "V" in s.com:
    compic = Image.open('Com-V.png')
elif "S" in s.com:
    compic = Image.open('Com-S.png')
elif "M" in s.com:
    compic = Image.open('Com-M.png')
else:
    raise NotImplementedError(s.com)