有没有办法检查pickle
是否创建了文件?我可以捕获pickle.load
抛出的异常,但没有特定的“不是pickle文件”异常。
答案 0 :(得分:8)
Pickle文件没有标题,所以没有标准方法来识别它们,而不是尝试取消标记,并查看是否有任何例外。
您可以通过继承Pickler()
模块中的Unpickler()
和pickle
类来定义您自己的增强协议,其中包含某种类型的标头。但是,使用速度更快的cPickle
模块无法做到这一点,因为其中有工厂函数无法进行子类化 [1] 。
更灵活的方法是定义您自己的独立类,在其实现中使用其中任何一个模块中的相应Pickler()
和Unpickler()
个实例。
<强>更新强>
所有pickle文件的最后一个字节应该是pickle.STOP
操作码,所以虽然没有标题, 实际上是一个非常小的预告片,这将是一个相对简单的事情检查。
根据您的确切用法,您可以通过更精细的补充来避免补充,因为任何超过腌制对象表示中的STOP
操作码的数据都会被忽略 [2]
pickle.loads()
的文档,它也适用于pickle.load()
,因为它目前是根据后者实现的。
答案 1 :(得分:7)
除了尝试去除它之外没有其他确定的方法,并且可以捕获异常。