如何处理 Python 代码中的“MemoryError”

新手上路,请多包涵

我有一段 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 许可协议

阅读 788
1 个回答

请注意,Python 只会在意识到会预先过度使用内存时抛出 MemoryError 。如果它是偶然发生的(或被 Python“未注意到”),那么你就不走运了。 文档 已经提到了这一点:

内存错误

当操作耗尽内存但情况仍可挽救时引发(通过删除一些对象)。关联值是一个字符串,指示哪种(内部)操作耗尽了内存。请注意,由于底层内存管理架构(C 的 malloc() 函数),解释器可能并不总是能够从这种情况中完全恢复;尽管如此,它还是会引发异常,以便可以打印堆栈回溯,以防程序失控。

因此,如果没有什么可挽救的或解释器无法恢复,则没有 MemoryError


一个好的方法需要知道您在做什么以及如何做。在大多数情况下,生成器(例如参见 PEP 289 on generator expressions )或 map-reduce 方法 可以为您节省大量内存。这些可能也适用于此。

原文由 MSeifert 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题