Python 我如何明确表示不支持酸洗?

Python 我如何明确表示不支持酸洗?,python,pickle,Python,Pickle,我编写了一个Python类,它不可能支持酸洗。尽管如此,用户偶尔会尝试pickle这个类的实例,这会导致混乱的错误。因此,每当尝试pickle类实例时,我希望抛出一条定制的、信息丰富的错误消息 我最好怎么做呢? 我对覆盖范围广泛的解决方案特别感兴趣,即不仅适用于标准库pickle,而且适用于它的替代方案 至于到目前为止我发现了什么,我会写,但我不确定这是否是最好的方法。通过阅读文档,我发现如果类有一个方法,那么在尝试酸洗时将调用它。因此,解决方案是覆盖此方法以引发异常,例如: import pi

我编写了一个Python类,它不可能支持酸洗。尽管如此,用户偶尔会尝试pickle这个类的实例,这会导致混乱的错误。因此,每当尝试pickle类实例时,我希望抛出一条定制的、信息丰富的错误消息

我最好怎么做呢? 我对覆盖范围广泛的解决方案特别感兴趣,即不仅适用于标准库
pickle
,而且适用于它的替代方案


至于到目前为止我发现了什么,我会写,但我不确定这是否是最好的方法。

通过阅读文档,我发现如果类有一个方法,那么在尝试酸洗时将调用它。因此,解决方案是覆盖此方法以引发异常,例如:

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")

您可以通过抛出异常来捕获更多序列化程序,但是由于复制协议使用了该方法,类似的事情也将停止与类一起工作。但是,可以通过实现
\uuuuu copy\uuuu
方法来解决这个问题(有关详细信息,请参阅模块文档)。