Saat ini saya sedang menulis skrip kecil untuk digunakan di salah satu server kami menggunakan Python. Server hanya menginstal Python 2.4.4.
Saya tidak mulai menggunakan Python sampai 2.5 keluar, jadi saya terbiasa dengan formulir:
with open('file.txt', 'r') as f:
# do stuff with f
Namun, tidak ada with
pernyataan sebelum 2.5, dan saya kesulitan menemukan contoh tentang cara yang tepat untuk membersihkan objek file secara manual.
Apa praktik terbaik untuk membuang objek file dengan aman saat menggunakan python versi lama?
open
gagal, pengecualian akan dimunculkan bahkan sebelumtry/finally
blok dimasukkan. Jadiclose
tidak akan dipanggil. (Itulah mengapa Anda harus meneleponopen
sebelumtry
.)open
mengajukan pengecualian.Dalam solusi di atas, diulangi di sini:
f = open('file.txt', 'r') try: # do stuff with f finally: f.close()
jika terjadi sesuatu yang buruk (Anda tidak pernah tahu ...) setelah membuka file dengan sukses dan sebelum mencoba, file tidak akan ditutup, jadi solusi yang lebih aman adalah:
f = None try: f = open('file.txt', 'r') # do stuff with f finally: if f is not None: f.close()
sumber
with open(...)
jelas merupakan pilihan terbaik dengan Python modern.Tidak perlu menutup file sesuai dengan dokumen jika Anda menggunakan dengan:
>>> with open('workfile', 'r') as f: ... read_data = f.read() >>> f.closed True
Selengkapnya di sini: https://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects
sumber
Berikut adalah contoh yang diberikan bagaimana menggunakan
open
dan "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()
Perlu berapa kali Anda membuka file harus menutup waktu itu.
sumber
open
tetapi sebelumnyaclose
, file tidak akan ditutup dengan benar menggunakan pendekatan ini. Menggunakanwith
atautry
/finally
menutup file dengan benar meskipun terdapat pengecualian.