Python 异常安全的 Pickle Us

2024-09-21 01:30:53 发布

您现在位置:Python中文网/ 问答频道 /正文

背景

我继承了一个包含很多try ... except:子句的代码基。它们大多太宽,调试起来很麻烦。我一直在检查并将每一个更改为最合理的形式,这通常包括删除它或指定异常。

问题

但我有点被这个难住了:

try:
    with open(self.session_filename, "rb") as f:
        data = cPickle.loads(zlib.decompress(f.read()))
except:
    # we didn't need your file anyway!
    return

我想特别处理异常,但是Python docs on Pickle说:

exception pickle.UnpicklingError

This exception is raised when there is a problem unpickling an object. Note that other exceptions may also be raised during unpickling, including (but not necessarily limited to)AttributeError, EOFError, ImportError, and IndexError.

翻译:这个方法可能会抛出任何东西!

很显然,它会引发任意异常,这使得很难具体处理它们。

我如何才能最合理地处理这种情况,同时牢记以下目标:

  1. 我想捕获由于文件名错误或其他操作系统问题或格式错误而导致的所有异常。
  2. 我不想过于宽泛,从而掩盖其他问题。
  3. 我不想阅读实现并尝试解析所有不同的潜在异常。这将依赖于实现,可能会随着更新而失败,并且需要很多时间。

可能不是所有的事情都能实现。


Tags: 代码selfissession错误withexceptionopen

热门问题