Pertimbangkan yang berikut ini:
with open(path, mode) as f:
return [line for line in f if condition]
Apakah file akan ditutup dengan benar, atau apakah menggunakan return
entah bagaimana memotong manajer konteks ?
python
return
with-statement
Lightbreeze
sumber
sumber
else
dapat ditambahkanwith
untuk mengatasitry with except
masalah itu. sunting: ditambahkan ke bahasaProcess.terminate()
adalah satu dari sedikit (satu-satunya?) Skenario yang tidak menjamin panggilanfinally
pernyataan: "Perhatikan bahwa keluar penangan dan akhirnya klausa, dll., Tidak akan dieksekusi. "os._exit
terkadang digunakan - ia keluar dari proses Python tanpa memanggil petugas pembersihan.with
blok, apakah jaminan berlaku selama generator terus menghasilkan nilai? selama referensi apa saja itu? Yaitu apakah saya perlu menggunakandel
atau menetapkan nilai yang berbeda untuk variabel yang menyimpan objek generator?ValueError: I/O operation on closed file.
.Iya.
..adalah setara dengan:
Lebih tepatnya,
__exit__
metode dalam manajer konteks selalu dipanggil saat keluar dari blok (terlepas dari pengecualian, pengembalian, dll). Metode objek file__exit__
hanya panggilanf.close()
(misalnya di sini di CPython )sumber
finally
keywrod adalah:def test(): try: return True; finally: return False
.Iya. Secara lebih umum,
__exit__
metode Manajer Pernyataan Dengan Pernyataan memang akan dipanggil jika terjadireturn
dari dalam konteks. Ini dapat diuji dengan yang berikut:Outputnya adalah:
Output di atas mengkonfirmasi bahwa
__exit__
itu disebut meskipun awalreturn
. Dengan demikian, manajer konteks tidak dilewati.sumber
Ya, tetapi mungkin ada beberapa efek samping dalam kasus lain, karena mungkin harus melakukan sesuatu (seperti buffer flushing) di
__exit__
bloksumber