Часто мне нужно вывести данные либо в файл, либо, если файл не указан, в стандартный вывод. Я использую следующий фрагмент:
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 строк.