J'apprends Python et j'essaie du Ceci est mon code: P> avec **** comme ****: code> déclaration. Je pense que cela fonctionne beaucoup comme c # 's
en utilisant (****) { code>, mais j'ai bien peur que je suive des exemples obsolètes.
Traceback (most recent call last):
File "test.py", line 7, in <module>
with pprint.pprint as pprint:
AttributeError: __exit__
4 Réponses :
Vous l'utilisez en vous attendant à une alias d'un nom existant, mais dans Python < Code> avec code> s'attend à ce qu'un gestionnaire de contexte . pprint.pproprint code> n'est pas un gestionnaire de contexte. P>
Il est conçu pour nettoyer automatiquement un objet à la fin d'un bloc, par exemple. Au lieu de p> , vous pouvez faire p> et la fermeture se produit automatiquement. p> Voir < Un href = "http://www.python.org/dev/peps/pep-0343/" rel = "NOREFERRER"> PEP 343 - La déclaration "avec" pour plus de détails et Quoi de neuf à Python 2.5 - PEP 343 Pour plus d'autres exemples de la façon dont Vous pouvez l'utiliser. P> p> avec code> ne fonctionne pas comme ça.
Ce n'est pas que avec code> devrait le nettoyer, c'est que le gestionnaire de contexte devrait se nettoyer et
avec code> gère sa durée de vie de manière appropriée.
Oui, mais pour répondre à une simple question avec des détails sur les gestionnaires de contexte et __ sortie __ code> serait trop déroutant IMHO.
Le Pour créer un alias, attribuez-le à une nouvelle variable: p> avec la relève code> n'est pas destiné à faire ce que vous attendez. Il utilise le "protocole de contexte gestionnaire" et, en tant que tel, il s'attend à être adopté un Gestionnaire de contexte .
Ou de pprint importation pprint code>. Ou
de pPrint importation pprint comme pp code>
J'ai supposé que l'alias devait être local dans un bloc, voyant comment l'OP a essayé d'utiliser le avec la relève code>. Si cela n'est pas nécessaire, le renommage à l'importation est en effet la meilleure solution.
Vous pouvez en savoir plus sur la déclaration "AS" ici: pythontic.com/concepts/keywords/aside/a > Cela devrait faire la différence entre «importer .. comme.» Et «avec .. comme ..» clair.
aliasing n'est pas ce que avec code> est pour. Ce que vous voulez probablement, c'est:
from pprint import pprint
pow = 1, 2, 3
pprint(pow)
Ce ne sont pas les droïdes que vous recherchez ...