Ce n'Python 3.2 “/” ne
Je suis en train d'apprendre le Python, et j'essaie à la with **** as ****:
déclaration. Je suppose qu'il fonctionne un peu comme C#'s using(****) {
, mais je crains que je suis dépassée exemples.
C'est mon code:
# -*- coding: iso-8859-1 -*-
import pprint
pow = 1, 2, 3
with pprint.pprint as pprint:
pprint(pow)
Je suppose que ce qui se passe ici est pprint
dans ma petite fermeture est un alias de la pprint.pprint
fonction. J'ai une erreur bizarre:
Traceback (most recent call last):
File "test.py", line 7, in <module>
with pprint.pprint as pprint:
AttributeError: __exit__
Alors maintenant, je pense que je suis en utilisant la syntaxe à partir d'une ancienne version de Python comme je l'ai fait plus tôt (print "Hello"
)
Pourquoi n'est-ce pas mon code fonctionne comme prévu?
Ce ne sont pas les droïdes que vous recherchez ...
OriginalL'auteur Hubro | 2011-04-24
Vous devez vous connecter pour publier un commentaire.
La
with
déclaration n'est pas destinée à faire ce que vous attendez. Il utilise le "gestionnaire de contexte de protocole", et en tant que tel, s'attend à être passé un gestionnaire de contexte.Pour créer un alias, juste de l'attribuer à une nouvelle variable:
from pprint import pprint
. Oufrom pprint import pprint as pp
J'ai supposé que l'alias a dû être locale à un bloc, de voir comment les OP essayé d'utiliser le
with
déclaration. Si ce n'est pas nécessaire, le changement de nom à l'importation est en effet la meilleure solution.OriginalL'auteur Remy Blank
with
ne fonctionne pas comme ça.Il est conçu pour nettoyer automatiquement un objet à la fin d'un bloc, par exemple, au lieu de
Vous pouvez faire
et la fermeture se fait automatiquement.
Voir PEP 343 -- La "avec la" Déclaration de pour plus de détails et Ce qui est Nouveau dans Python 2.5 - PEP 343 pour certains plus d'exemples de comment vous pouvez l'utiliser.
with
est prévu pour le nettoyer, c'est que le gestionnaire de contexte est prévu pour nettoyer lui-même, etwith
gère sa vie de façon appropriée.Oui, mais pour répondre à une question simple avec des détails sur le contexte, les gestionnaires et les
__exit__
serait trop confus à mon humble avis.OriginalL'auteur Mikel
Vous l'utilisez en espérant que cela alias un nom déjà existant, mais en Python
s'attend à être passé d'un gestionnaire de contexte.
pprint.pprint
n'est pas un gestionnaire de contexte.OriginalL'auteur Ignacio Vazquez-Abrams
Aliasing n'est pas ce que
with
est pour. Ce que vous voulez probablement est-ce:OriginalL'auteur Santa