2016-08-03 45 views
-2

我正在通过pickled文件列表循环,一些文件有EOF错误,这意味着它们没有正确写入。有没有办法循环有这些错误的文件,并继续到下一个文件,而不是整个脚本停止?EOF Error Pickle

回答

1

使用try/except

所有的
for pkl_file in pkls: 
    try: 
     obj = pickle.load(..) # or however you load the file 
    except EOFError: 
     continue 
    # rest of code, handling obj 
+0

大,谢谢! – Kate

0

首先,确保你是在二进制模式打开pickle文件,因为这是当读/写数据的泡菜EOF错误的潜在原因。

当你正在阅读的咸菜文件调用open()时使用rb模式。同样,如果它是写入pickle文件的代码,请确保通过指定模式wb以二进制模式写入文件。

其次捕获异常而忽略它,在“忽略”意味着你发出警告信息,因此任何真正的坏泡菜文件将被注意到。

import cPickle as pickle 

for filename in pickle_files: 
    try: 
     with open(filename, 'rb') as f: 
      data = pickle.load(f) 
      # use the data 
    except EOFError as exc: 
     print(exc)