No momento, estou escrevendo um pequeno script para uso em um de nossos servidores usando Python. O servidor tem apenas Python 2.4.4 instalado.
Eu não comecei a usar Python até o lançamento do 2.5, então estou acostumado com o formulário:
with open('file.txt', 'r') as f:
# do stuff with f
No entanto, não há nenhuma with
declaração antes de 2.5, e estou tendo problemas para encontrar exemplos sobre a maneira adequada de limpar um objeto de arquivo manualmente.
Qual é a prática recomendada para descartar objetos de arquivo com segurança ao usar versões antigas do python?
fonte
open
falhar, uma exceção será gerada antes mesmo de otry/finally
bloco ser inserido. Portantoclose
, não será chamado. (É por isso que você deve ligaropen
antes dotry
.)open
criar uma exceção.Na solução acima, repetida aqui:
f = open('file.txt', 'r') try: # do stuff with f finally: f.close()
se algo de ruim acontecer (nunca se sabe ...) depois de abrir o arquivo com sucesso e antes de tentar, o arquivo não será fechado, então uma solução mais segura é:
f = None try: f = open('file.txt', 'r') # do stuff with f finally: if f is not None: f.close()
fonte
with open(...)
é definitivamente a melhor escolha em Python moderno.Não há necessidade de fechar o arquivo de acordo com os documentos se você usar com:
>>> with open('workfile', 'r') as f: ... read_data = f.read() >>> f.closed True
Mais aqui: https://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects
fonte
Aqui está um exemplo dado como usar
open
e "pythonclose
from sys import argv script,filename=argv txt=open(filename) print "filename %r" %(filename) print txt.read() txt.close() print "Change the file name" file_again=raw_input('>') print "New file name %r" %(file_again) txt_again=open(file_again) print txt_again.read() txt_again.close()
É necessário quantas vezes você abriu o arquivo tem que fechar essas vezes.
fonte
open
mas antesclose
, o arquivo não será fechado corretamente usando esta abordagem. Usarwith
outry
/finally
fecha o arquivo corretamente, mesmo na presença de exceções.