Python с утверждением - есть ли необходимость в обработке файлов в старом стиле? - PullRequest
1 голос
/ 22 октября 2010

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

try:
  f = open('myfile.txt')

  for line in f:
    print line
except IOError:
  print 'Could not open/read file'
finally:
  f.close()

1 Ответ

5 голосов
/ 22 октября 2010

Ваш текущий код пытается обработать исключение файла, который не был найден, или недостаточных прав доступа и т. Д., Чего бы не сделал блок with open(file) as f:.

Также, в этом случае,блок finally: поднял бы NameError, поскольку f не был бы определен.

В блоке with - любое исключение (любого типа, может быть деление на ноль в вашемкод), который происходит внутри блока , все равно будет активирован, но даже если вы его не обработаете, ваш файл всегда будет закрыт должным образом.Это нечто совершенно другое.

То, что вы хотите, вероятно, это:

try:
    with open("myfile.txt") as f:
        do_Stuff()  # even if this raises an exception, f will be closed.
except IOError:
    print "Couldn't open/read myfile.txt"
...