บ่อยครั้งที่ฉันต้องการส่งออกข้อมูลไปยังไฟล์หรือหากไม่ได้ระบุไฟล์เป็น stdout ฉันใช้ข้อมูลโค้ดต่อไปนี้:
if target:
with open(target, 'w') as h:
h.write(content)
else:
sys.stdout.write(content)
ฉันต้องการเขียนมันใหม่และจัดการทั้งสองเป้าหมายอย่างสม่ำเสมอ
ในกรณีที่ดีที่สุดคือ:
with open(target, 'w') as h:
h.write(content)
แต่จะไม่ได้ผลเพราะ sys.stdout ถูกปิดเมื่อออกจากwithบล็อกและฉันไม่ต้องการสิ่งนั้น ฉันไม่ต้องการ
stdout = open(target, 'w')
...
เพราะฉันจะต้องจำไว้ว่าต้องกู้คืนมาตรฐานเดิม
ที่เกี่ยวข้อง:
- เปลี่ยนเส้นทาง stdout ไปยังไฟล์ใน Python?
- การจัดการข้อยกเว้น - บทความที่น่าสนใจเกี่ยวกับการจัดการข้อยกเว้นใน Python เมื่อเทียบกับ C ++
แก้ไข
ฉันรู้ว่าฉันสามารถtargetรวมกำหนดฟังก์ชันแยกหรือใช้ตัวจัดการบริบทได้ ฉันมองหาวิธีแก้ปัญหาที่เรียบง่ายสง่างามและใช้สำนวนที่ไม่ต้องใช้เกิน 5 บรรทัด