我如何明确不支持酸洗?

时间:2018-10-27 10:37:08

标签: python pickle

我写了一个Python类,它可能不支持酸洗。尽管如此,用户仍然时不时地尝试腌制此类的实例,这会导致令人困惑的错误。因此,我希望在尝试腌制我的类的实例时抛出自定义的信息错误消息。

如何最好地做到这一点? 我对覆盖面广的解决方案特别感兴趣,即,这些解决方案不仅适用于标准库pickle,而且还可以替代标准库。

关于到目前为止我发现的内容,我会写a self-answer,但是我不确定这是否是最好的方法。

1 个答案:

答案 0 :(得分:2)

通过阅读文档,我了解到,如果类具有__getstate__方法,则在尝试进行酸洗时将调用该方法。因此,一种解决方案是重写此方法以引发异常,例如:

import pickle

class Foo(object):
    def __getstate__(self):
        raise pickle.PickleError("No pickling for Foo.")

这似乎起作用:

some_foo = Foo()
try:
    pickle.dumps(some_foo)
except pickle.PickleError:
    print("Error raised.")
else:
    raise AssertionError("Error not raised")