17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Syntaxe du langage<br />

CHAPITRE 4<br />

L’instruction with permet de s’affranchir de la gestion du bloc try..finally et de<br />

l’appel au code de fermeture, en s’en chargeant automatiquement du moment que<br />

l’objet manipulé est compatible avec ce protocole, appelé le context management protocol.<br />

C’est le cas pour les objets de type file. L’écriture ci-dessous est équivalente à un<br />

bloc try..finally avec un appel à close.<br />

Écriture dans un fichier avec with<br />

>>> f = open('fichier', 'w')<br />

>>> with f:<br />

... f.write('contenu')<br />

with se base sur deux nouvelles méthodes spéciales __enter__ et __exit__. La première<br />

est appelée au début du bloc, la deuxième à la fin.<br />

Exemple de classe supportant with<br />

>>> class SupportWith(object):<br />

... def __enter__(self):<br />

... print('début')<br />

... def __exit__(self, exc_type, exc_value, traceback):<br />

... print('fin')<br />

...<br />

>>> s = SupportWith()<br />

>>> with s:<br />

... print('bloc')<br />

...<br />

début<br />

bloc<br />

fin<br />

La méthode __enter__ ne prend aucun paramètre, alors que la méthode __exit__ en<br />

demande trois. Ces derniers permettent de récupérer une éventuelle exception :<br />

exc_type : le type de l’erreur déclenchée ;<br />

exc_value : la valeur de l’erreur déclenchée ;<br />

traceback : l’objet traceback.<br />

Si aucune erreur n’a lieu, toutes ces valeurs sont à None.<br />

__exit__ ne doit jamais déclencher d’erreur ou redéclencher l’erreur qui lui est<br />

passée. La méthode retourne cependant False lorsqu’elle souhaite que l’erreur continue<br />

à être propagée. Si elle retourne True, l’erreur est absorbée et l’interpréteur continue<br />

le programme en se positionnant sur la directive suivante après le bloc.<br />

93

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!