Часто мне нужно выводить данные в файл или, если файл не указан, в стандартный вывод. Я использую следующий фрагмент:
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.
Связанный:
- Перенаправить stdout в файл в Python?
- Обработка исключений - интересная статья об обработке исключений в Python по сравнению с С++
Edit
Я знаю, что могу обернуть target
, определить отдельную функцию или использовать контекстный менеджер. Я ищу простой, элегантный, идиоматический подход к решению, который не требует больше 5 строк