2013-05-25 3 views
2

Каков наилучший способ в python обрабатывать чтение файла, который потенциально может не существовать?Файл чтения Python, который может не существовать

В настоящее время у меня есть следующие:

try: 
     with open(filename, "r") as f: 
      return f.read() 
    except IOError: 
     return False 

Это лучший способ сделать это, или это не так на любом уровне на всех?

Я думаю, мои самые большие опасения:

  1. Ловля исключения только для возвращения ложной
  2. Может быть я отсутствующим путем «Python» из беззвучно отсутствует ошибку пропавшего файл
+0

это довольно хорошо. Единственная проблема, о которой я могу думать, это то, что может существовать существующий файл, который вы не можете открыть (например, разрешения установлены неверно). Это вернет 'False' для этого случая, но вы не определили, что вы хотите там сделать ... – mgilson

+0

Я действительно думаю, что это лучший способ. См [это ответ на подобный вопрос] [1] [1]: http://stackoverflow.com/a/85237/17001 – Emjay

ответ

5

A try/except действительно лучший способ.

+1

возвращает ложь от пойманной за исключением ок? –

+1

@MartyWallace, зависит от того, как вы планируете использовать эту функцию. Но я склоняюсь к нет. Лично я просто пропускаю ошибки, пока не достигнет точки, в которой я знаю, что делать с ошибкой. –

+0

Ну, это функция, которая читает файл на основе ключа (кешированный файл), поэтому совершенно правдоподобно, что файл еще не существует. В этом смысле это действительно исключение как таковое - просто, что python заставляет меня рассматривать его как исключение –

1

Пробуй за исключением блока, поймает ошибку, но вы можете не захотеть подавить ошибку.

Если вы пишете функцию, которая возвращает содержимое, считанное из файла, тогда было бы разумнее return '' вместо False. Обычно функция возвращает только один тип. Что-то вроде:

try: 
    with open(filename) as f: 
     return f.read() 
except IOError: 
    return '' 

Действительно, кажется, что вы сигнализируете об ошибке с возвратом. Если это так, вам обычно лучше, просто исключая исключение из функции. Это не pythonic, чтобы использовать возвращаемое значение, чтобы сигнализировать о исключительном состоянии.

+0

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

+0

@MartyWallace. Это зависит от того, что вы делаете с содержимым файла. Я думаю, что пустая строка достаточно безопасна для общего случая. Кроме того, используйте try/except/else, где else обрабатывает случай, когда файл открыт и был прочитан. –

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