Python PIL在内存中保留最后一个图像
在我的代码中,我在一个csv文件中循环,对于每一行,都会根据其中一个值分配一个图像。如下所示: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:
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)