何千ものディレクトリとその内容を削除する関数から抽出した、この1回限りのコードを持っています。複数のインデントを入れ子にすることなく、(コンテキスト管理を使って)たくさんのファイルを開く方法
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です。 2つはリンクされるべきですが、2つの重要なことがこの問題を明確にします。 1)この質問は、コンテクストマネージャーの使用の標準的な例を使用しています: "open(f)as fd:"対コンテキストマネージャーから得られる "ロック"オブジェクトの言及(明らかに同じですが、 2)勤勉な検索で、以前の質問やその答えが出されなかった。 (恐らく、これは 'with'、 'as'、 'context'、 'manager'という貧しい検索語句の絶対偏在によってさらに困難になり、キーワード「contextmanager」は推測できないと思われる)。
多分Stack Exchange Code Reviewの質問ですか? – palsch
[python:複数のコンテキストマネージャーで "with"ブロックを作成する](http://stackoverflow.com/questions/3024925/python-create-a-with-block-on-several-context-managers) –
関連する質問を指摘してくれてありがとう。良い接続。私はそれを私の検索では見つけられなかった。 – mohawkTrail