Использование конструкции with ... as
полезно для автоматического закрытия файла.Это означает, что использование его с sys.stdout
, как я думаю, вы знаете, приведет к краху вашей программы, потому что она попытается закрыть системный вывод!
Это означает что-то вроде with open(name, 'w') if name else sys.stdout as:
это не сработало бы.
Это заставляет меня сказать, что не существует простого и приятного способа написать свой фрагмент лучше ... но, возможно, есть и лучшие способы придумать, как создать такой код!
Главное, что нужно уточнить, - это когда вам нужно открыть (и, что более важно, закрыть) обработчик файла для file_name
, когда существует имя файла.
Лично я бы просто отбросил with .. as
и взялпозаботьтесь об открытии файла - и, что более важно, закройте его!- где-нибудь еще.Пробег для этого может варьироваться в зависимости от того, как работает ваше программное обеспечение.
Это означает, что вы можете просто:
out_file = open(file_name, 'w') if file_name else sys.stdout
и работать с out_file во всей вашей программе.
КогдаВы закрываете, не забудьте проверить, является ли это файл или нет:)
А вы не задумывались о том, чтобы просто использовать модуль logging
?Это позволяет легко добавлять разные обработчики, печатать в файл, печатать на стандартный вывод ...