如何在不嵌套一堆缩进的情况下打开一堆文件(使用上下文管理)

How can I open a bunch of files (with context management) without nesting a bunch of indents

我有这段一次性代码,是从一个删除数万个目录及其内容的函数中提取出来的。这很好,但我想知道我是否可以在一堆文件上使用 "with open() as" 而无需缩进和缩进和缩进...

with open(deleted_dirs, 'w') as out_removed:
    with open(unsuccessful_targets, 'w') as out_fail:
        with open(already_gone, 'w') as out_nowhere:
            for target in targets:
                try:
                    shutil.rmtree(target, ignore_errors=False, onerror=on_fail_rmtree)
                    print(target, file=out_removed)
                except FileNotFoundError:
                    print(target, file=out_nowhere)
                except PermissionError:
                    logger.warning('Permission Error: {}'.format(target))
                    print(target, file=out_fail)
return

这个问题确实与 python: create a "with" block on several context managers 涉及相同的主题。两者应该联系起来,但是有两个重要的事情使这个问题与众不同。 1)这个问题使用了使用上下文管理器的典型示例:"with open(f) as fd:" 与提及 "lock" 可从上下文管理器获得的对象(显然相同但不那么明显),更重要的是2)勤奋的搜索未能提出较早的问题或其答案。 (可能由于 'with'、'as'、'context' 和 'manager' 作为不良搜索词的绝对普遍性而变得更加困难,并且关键字 "contextmanager"是无法猜测的。)

很简单。打开三个文件写入的例子:

with open('file1', 'w') as f1, open('file2', 'w') as f2, open('file3', 'w') as f3:
    # do stuff