我有一段 python 代码,它会在一段时间后生成 MemoryError
。我知道它会消耗大量内存。所以,我决定将代码放在 try/except
块中,这样骨架看起来如下所示:
while True:
while True:
try:
#---- do some stuff
except MemoryError as err:
print(err)
break
所以,我的想法是突破第一个 while
如果 MemoryError
发生并且因为我有一个外部 while
,它将启动再次编程。
它似乎暂时有效,但我不确定。过了一会儿,它又停止了,我需要重新启动程序。有人知道更好的解决方案,以便程序可以在 MemoryError
之后再次运行吗?
原文由 aminakoy 发布,翻译遵循 CC BY-SA 4.0 许可协议
请注意,Python 只会在意识到会预先过度使用内存时抛出
MemoryError
。如果它是偶然发生的(或被 Python“未注意到”),那么你就不走运了。 文档 已经提到了这一点:因此,如果没有什么可挽救的或解释器无法恢复,则没有
MemoryError
。一个好的方法需要知道您在做什么以及如何做。在大多数情况下,生成器(例如参见 PEP 289 on generator expressions )或 map-reduce 方法 可以为您节省大量内存。这些可能也适用于此。