Je comprends queValeur de retour de __exit__
__enter__
et__exit__
sont utilisés pour mettre en œuvre un gestionnaire de contexte. Si une exception se produit dans une instructionwith
, le type, la valeur et la trace de l'exception sont transmis à la méthode__exit__
.__exit__
peut gérer l'exception:- De retour
True
: l'exception est gracieusement traitée. - De retour toute autre chose: la déclaration
with
soulève l'exception
- De retour
je suis tombé sur la méthode __exit__
suivante. La déclaration de retour est-elle redondante?
def __exit__(self, type, value, traceback):
self.close()
return type == None
car il me semble que,
- Si aucune exception est survenue,
type
sera naturellementNone
, donc__exit__
renvoie true. Rien n'est soulevé. - Si une exception s'est produite,
type
est défini sur le type d'exception réel, alors__exit__
renvoie la valeur false. L'exception est levée telle quelle.
Il s'agit d'une instruction 'return' qui prête à confusion à plus d'un niveau. N'utilisez jamais '== None' quand vous pouvez utiliser' is None' à la place. Mais oui, supprimez simplement cette ligne 'return' pour tout ce qu'elle vaut. –
Il est également source de confusion lorsque vous nommez l'argument de la méthode 'type'. Parce que 'type' est déjà un mot clé intégré.il est préférable d'utiliser 'exc_type' car il ne confond pas et ne crée pas d'ombre dans le mot-clé build-in. –