我写了一个Python类,它可能不支持酸洗。尽管如此,用户仍然时不时地尝试腌制此类的实例,这会导致令人困惑的错误。因此,我希望在尝试腌制我的类的实例时抛出自定义的信息错误消息。
如何最好地做到这一点?
我对覆盖面广的解决方案特别感兴趣,即,这些解决方案不仅适用于标准库pickle
,而且还可以替代标准库。
关于到目前为止我发现的内容,我会写a self-answer,但是我不确定这是否是最好的方法。
答案 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")