J'ai ce bit de code à usage unique, extrait d'une fonction pour supprimer des dizaines de milliers de répertoires et leur contenu. Il est très bien, mais je me demande si je peux utiliser « avec open() comme » un tas de fichiers sans indenter et indenter et ... indenterComment puis-je ouvrir un tas de fichiers (avec gestion de contexte) sans imbriquer un tas de retraits
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
Cette question ne touche sur le même sujet comme python: create a "with" block on several context managers. Les deux devraient être liés, mais deux choses importantes rendent cette question distincte. 1) Cette question utilise l'exemple canonique de l'utilisation du gestionnaire de contexte: "avec open (f) comme fd:" par opposition à la mention d'objets "lock" obtenus d'un gestionnaire de contexte, (évidemment le même mais pas si évidemment) et est plus important 2) Une recherche diligente n'a pas réussi à faire apparaître la question précédente ou ses réponses. (Peut-être cela a-t-il été rendu plus difficile par l'omniprésence absolue de 'avec', 'as', 'contexte' et 'manager' comme termes de recherche médiocres et que le mot-clé "gestionnaire de contexte" est introuvable.)
Peut-être une question pour Stack Exchange Code Review? – palsch
Copie possible de [python: créer un bloc "avec" sur plusieurs gestionnaires de contexte] (http://stackoverflow.com/questions/3024925/python-create-a-with-block-on-several-context-managers) –
Merci d'avoir signalé la question connexe. Bonne connexion. Je n'ai pas trouvé ma recherche. – mohawkTrail