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