2016-11-10 2 views
0

Есть ли способ обрабатывать исключения при чтении определенной строки файла?Как обрабатывать исключения при чтении строк файла?

Например, у меня есть этот блок:

with open(fileIn, 'rb') as f: 
    reader = csv.reader(f, delimiter='\t') 
    for i, row in enumerate(reader): 
     try: 
      # stuff 
     except: 
      pass 

и, после разбора половину файла, я получаю сообщение об ошибке

IOError: [Errno 22] Invalid argument

на линии

 for i, row in enumerate(reader): 

и Я хотел бы продолжить синтаксический анализ файла, пропуская строку проблем.

ответ

2

for...reader неоднократно называет next(reader). Чтобы перехватить исключение при циклировании, выполните цикл и сделайте следующие вызовы самостоятельно. Untested:

with open(fileIn, 'rb') as f: 
    reader = csv.reader(f, delimiter='\t') 
    i = -1 
    while True: 
     i += 1 
     try: 
      row = next(reader) 
     except StopIteration: 
      break 
     except IOError: 
      pass 
     else: 
      try: 
       # stuff 
      except: 
       pass 
1

csv.reader возвращает объект, который выполняет итерацию через файлоподобный итератор и обрабатывает то, что он находит при чтении. У вас есть IOError, который кажется безвозвратным. (Правильно ли я об этом?) В этом случае не самое лучшее, что вы могли бы сделать, чтобы определить недостаток во входных данных? У Педро Гиларди есть предложение сделать это в reading csv file without for.

+1

Входной файл размером более 100 ГБ, поэтому лучше всего убедиться, что код, который анализирует его, является надежным. Ссылка полезна, спасибо. – jensph

Смежные вопросы