Как лучше всего ловить ошибки при чтении файлов на python?

1

Я новичок в Python и борюсь со следующим. Пользователи загружают CSV файл, который затем обрабатываю. Однако многое может пойти не так. Основными проблемами, которые я нашел, являются: а) файлы, которые они загружают, не являются файлами CSV, или б) файлы не загружаются с использованием кодировки UTF8 (которая по умолчанию используется в нашей системе).

Вопрос в том, где именно я должен проверить эти проблемы? Это мой сценарий:

with open(path) as f:
    reader = csv.reader(f)
    for row in reader:

        (do stuff...)

Я попытался добавить это:

try:
    reader = csv.reader(f)
except:
    error = "There was an error..."

Но если пользователь загружает файл с неправильной кодировкой, то это не поймано. Кажется, что он только что пойман, когда начинается цикл (для строки в считывателе), и только для конкретной строки, которая вызывает проблемы. Означает ли это, что я должен иметь такую проверку ошибок внутри оператора for? Мне кажется намного лучше сделать это только один раз, а не на каждом предмете, но я не уверен, что здесь больше всего смысла...

Теги:
csv
error-handling

1 ответ

1
Лучший ответ

Могут быть более прямые способы поймать подобные вещи с помощью CSV-ридера (я не уверен), но когда у меня есть входные файлы, поступающие от других пользователей с возможностью подобных ошибок, я просто разбираю файлы вручную. Например:

import sys
NumFields = 3
inf = open(path, "rU")

for line in inf:
    line = line.strip() #get rid of weird end-of-line characters from bad encoding
    ls = line.split(",")
    if len(ls) != NumFields:
         ls = line.split("\t") ##if you can't get the number of fields with comma split, try tab
         if len(ls) != NumFields:
             sys.exit(1)
    print ls

Ещё вопросы

Сообщество Overcoder
Наверх
Меню