Seringkali saya perlu mengeluarkan data ke file atau, jika file tidak ditentukan, ke stdout. Saya menggunakan potongan berikut:
if target:
with open(target, 'w') as h:
h.write(content)
else:
sys.stdout.write(content)
Saya ingin menulis ulang dan menangani kedua target secara seragam.
Dalam kasus yang ideal itu adalah:
with open(target, 'w') as h:
h.write(content)
tetapi ini tidak akan berfungsi dengan baik karena sys.stdout ditutup saat keluar dari withblok dan saya tidak menginginkannya. Saya juga tidak mau
stdout = open(target, 'w')
...
karena saya harus ingat untuk mengembalikan stdout asli.
Terkait:
- Alihkan stdout ke file dengan Python?
- Menangani Pengecualian - artikel menarik tentang menangani pengecualian dengan Python, dibandingkan dengan C ++
Edit
Saya tahu bahwa saya dapat membungkus target, menentukan fungsi terpisah atau menggunakan manajer konteks . Saya mencari solusi yang sederhana, elegan, dan idiomatis yang tidak memerlukan lebih dari 5 baris