Mengenai pertanyaan saya sebelumnya , saya perhatikan bahwa dalam kedua jawaban yang menggunakan open()
fungsi tersebut, tidak disebutkan untuk menutup file.
Saya sudah membaca bahwa itu praktik yang baik untuk melakukannya, tetapi apakah sebenarnya ada kebutuhan untuk itu? Apakah itu hanya kode yang tidak perlu?
Apakah file ditutup secara otomatis?
with open (file_name, ...) as variable:
secara otomatis memanggilclose()
metode segera setelah Anda meninggalkan blok kode ini.python3
, file tersebut dibatalkan secara otomatis setelah tidak memiliki referensi lagi.Jawaban:
Kapan file ditutup?
Seperti yang dapat kita pelajari dari Apakah secara eksplisit menutup file penting? (StackOverflow) , interpreter Python menutup file dalam kasus berikut:
close()
metodefile
objek secara eksplisit atau implisit dengan meninggalkanwith open(...):
blok. Ini berfungsi tentu saja selalu dan pada setiap implementasi Python.file
referensi terakhir objek mendapat dihapus dan karena itu objek akan diproses oleh Kolektor Sampah. Ini bukan fitur bahasa, tetapi fitur khusus dari implementasi CPython saja, jadi untuk portabilitas jangan mengandalkan ini!Jadi hanya metode (manual) pertama yang dapat diandalkan!
Apa yang akan terjadi jika file tetap terbuka?
Pertama, tergantung pada implementasi interpreter Python Anda, jika Anda membuka file dengan akses tulis, Anda tidak dapat memastikan bahwa modifikasi Anda mem-flush ke disk sampai Anda menginduksi secara manual atau file handler ditutup.
Kedua, Anda hanya dapat membuka sejumlah file pada sistem Anda per pengguna. Jika Anda melebihi batas ini dengan misalnya membuka banyak file dalam satu loop dalam program Python Anda tanpa menutupnya sesegera mungkin, sistem mungkin menolak untuk membuka file menangani lebih lanjut untuk Anda dan Anda akan menerima pengecualian. Mungkin juga terjadi bahwa program Anda mengambil file terbuka terakhir yang diizinkan dan program lain akan gagal karena ditolak.
Ketiga, membuka file pada perangkat yang dapat dilepas mencegahnya tidak di-mount atau dikeluarkan. Anda masih dapat menghapus file pada beberapa sistem file seperti
ext4
, di mana hanya deskriptor file / tautan keras ke inode file akan dihapus / tidak ditautkan tetapi program yang membuka file masih dapat mengakses inode melalui file handler temporernya sendiri. Ini juga merupakan mekanisme yang memungkinkan Anda memperbarui paket ketika perangkat lunak masing-masing berjalan. Namun, misalnya NTFS tidak memiliki fitur seperti itu. Namun mungkin tidak pernah dimodifikasi oleh dua proses bersamaan, sehingga entah bagaimana akan tetap diblokir untuk orang lain.sumber
python3
tidak ada lagi dan jawabannya sudah usang. Pengumpulan sampah otomatis ada karena suatu alasan dan berfungsi dengan sempurna. Sudah bertahun-tahun sejak saya menggunakanclose()
secara khusus. Tidak pernah mengalami kesalahan tunggal yang disebabkan oleh tidak menggunakannya.