2016-08-03 4 views
-2

Я просматриваю список маринованных файлов, а некоторые из моих файлов имеют ошибки 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

Прежде всего, убедитесь, что вы открываете файлы маринованные в двоичном режиме, поскольку это является потенциальной причиной ошибки EOF при чтении/записи данных маринованные.

Когда вы читаете файлы рассола, используйте режим rb при звонке open(). Аналогично, если это ваш код, который пишет файлы 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)