Использование оператора python «with» с блоком try-exc

Является ли это правильным способом использовать оператор python "with" в сочетании с блоком try-exc?:

try:
    with open("file", "r") as f:
        line = f.readline()
except IOError:
    <whatever>

Если это так, то рассмотреть старый способ действий :

try:
    f = open("file", "r")
    line = f.readline()
except IOError:
    <whatever>
finally:
    f.close()

Является ли основным преимуществом утверждения «с» здесь то, что мы можем избавиться от трех строк кода? Мне не кажется убедительным для этого варианта использования (хотя я понимаю, что оператор «с» имеет другое применение).

РЕДАКТИРОВАТЬ: Являются ли функциональные возможности двух вышеупомянутых блоков кода идентичными

РЕДАКТИРОВАТЬ 2: Первые несколько ответов обычно говорят о преимуществах использования «с», но здесь они кажутся незначительными. Мы все (или должны были) явно вызывать f.close () в течение многих лет. Полагаю, одно преимущество заключается в том, что неаккуратные кодировщики выиграют от использования «с».

90
задан gaefan 4 September 2010 в 12:30
поделиться