通常,我需要将数据输出到文件,或者,如果未指定文件,则将数据输出到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)
但这不能很好地工作,因为在离开with块时sys.stdout是关闭的,我不希望这样。我都不想要
stdout = open(target, 'w')
...
因为我需要记住恢复原始的stdout。
有关:
- 将stdout重定向到Python中的文件?
- 处理异常 -有关与C ++相比在Python中处理异常的有趣文章
编辑
我知道我可以包装target,定义单独的功能或使用上下文管理器。我正在寻找一种简单,优雅,惯用的解决方案配件,它不需要多于5条线