Comments on: Les context managers et le mot clé with en Python http://sametmax.com/les-context-managers-et-le-mot-cle-with-en-python/ Deux développeurs en vadrouille qui se sortent les doigts du code Wed, 05 Feb 2014 12:15:31 +0000 hourly 1 http://wordpress.org/?v=3.3.1 By: Lujeni http://sametmax.com/les-context-managers-et-le-mot-cle-with-en-python/#comment-7528 Lujeni Sun, 31 Mar 2013 00:01:40 +0000 http://sametmax.com/?p=1987#comment-7528 Hello, dans l'exemple du code mixant Decorator&Context il manque un <strong>t </strong>sur la ligne <code>self.start = datetime.dateime.now()</code>. L'utilisation du decorator TimeIt semble lèver une exception TypeError: object.__new__() takes no parameters. Hello, dans l’exemple du code mixant Decorator&Context il manque un t sur la ligne self.start = datetime.dateime.now(). L’utilisation du decorator TimeIt semble lèver une exception TypeError: object.__new__() takes no parameters.

]]>
By: Etienne http://sametmax.com/les-context-managers-et-le-mot-cle-with-en-python/#comment-5805 Etienne Fri, 01 Feb 2013 10:55:42 +0000 http://sametmax.com/?p=1987#comment-5805 Vraiment chouette tout ça. Ce qui est bien, c'est que les contextmanager peuvent être utilisé sur des bouts de code de taille arbitraire. Je pense à ton TimeIt par exemple, qui pourrait logger le temps d'exécution de portions de code critique (genre query dans db qui grossit rapidement), et/ou pourrait effectuer un action si ce temps dépasse un seuil donné. Sympa, sympa Vraiment chouette tout ça. Ce qui est bien, c’est que les contextmanager peuvent être utilisé sur des bouts de code de taille arbitraire.

Je pense à ton TimeIt par exemple, qui pourrait logger le temps d’exécution de portions de code critique (genre query dans db qui grossit rapidement), et/ou pourrait effectuer un action si ce temps dépasse un seuil donné.

Sympa, sympa

]]>
By: Sam http://sametmax.com/les-context-managers-et-le-mot-cle-with-en-python/#comment-1830 Sam Thu, 13 Sep 2012 11:59:17 +0000 http://sametmax.com/?p=1987#comment-1830 Au passage, j'ai eu la question: "Mais en quoi c'est utile le context manager pour open ?" <pre lang="python">try: with open("fichier", "r") as f: ligne = f.readline() except IOError: print "Erreur"</pre> "Est a peine plus court que:" <pre lang="python"> try: f = open("fichier", "r") ligne = f.readline() except IOError: print "Erreur" finally: f.close()</pre> Alors je note la réponse ici: Ces deux codes ci-dessus ne sont PAS équivalents. En effet, l'équivalent sans le context manager est: <pre lang="python"> try: f = open("fichier", "r") try: ligne = f.readline() finally: f.close() except IOError: print "Erreur" </pre> Avec un double <code>try</code> imbriqué. En effet, il peut y avoir une erreur à l'ouverture du fichier, et dans ce cas la clause <code>finally</code> va planter, car <code>f</code> n'existera pas ! Utiliser <code>with</code> permet de s'affranchir de ce genre de petits détails. Au passage, j’ai eu la question:

“Mais en quoi c’est utile le context manager pour open ?”

try:
    with open("fichier", "r") as f:
        ligne = f.readline()
except IOError:
    print "Erreur"

“Est a peine plus court que:”

try:
    f = open("fichier", "r")
    ligne = f.readline()
except IOError:
    print "Erreur"
finally:
    f.close()

Alors je note la réponse ici:

Ces deux codes ci-dessus ne sont PAS équivalents.

En effet, l’équivalent sans le context manager est:

try:
    f = open("fichier", "r")
    try:
        ligne = f.readline()
    finally:
        f.close()
except IOError:
    print "Erreur"

Avec un double try imbriqué.

En effet, il peut y avoir une erreur à l’ouverture du fichier, et dans ce cas la clause finally va planter, car f n’existera pas !

Utiliser with permet de s’affranchir de ce genre de petits détails.

]]>
By: Sébastien http://sametmax.com/les-context-managers-et-le-mot-cle-with-en-python/#comment-1701 Sébastien Tue, 04 Sep 2012 17:18:07 +0000 http://sametmax.com/?p=1987#comment-1701 Très bon article ! Merci les gars ! Très bon article ! Merci les gars !

]]>
By: Sam http://sametmax.com/les-context-managers-et-le-mot-cle-with-en-python/#comment-1700 Sam Tue, 04 Sep 2012 14:07:23 +0000 http://sametmax.com/?p=1987#comment-1700 Merci zariko. Maintenant il faut que je trouve un moyen de placer "la fin des zarikos" dans un blog post. Merci zariko.

Maintenant il faut que je trouve un moyen de placer “la fin des zarikos” dans un blog post.

]]>
By: Zariko http://sametmax.com/les-context-managers-et-le-mot-cle-with-en-python/#comment-1698 Zariko Tue, 04 Sep 2012 11:54:20 +0000 http://sametmax.com/?p=1987#comment-1698 Super article ! Petite typo sur le ContextDecorator: @functools.wraps => @wraps Super article !

Petite typo sur le ContextDecorator: @functools.wraps => @wraps

]]>
By: Lujeni http://sametmax.com/les-context-managers-et-le-mot-cle-with-en-python/#comment-1695 Lujeni Tue, 04 Sep 2012 02:44:36 +0000 http://sametmax.com/?p=1987#comment-1695 Encore un très beau article sur des concepts de python peu souvent utilisé ( à mon sens ) ! Vivement les prochains articles :) ! Enjoy Encore un très beau article sur des concepts de python peu souvent utilisé ( à mon sens ) ! Vivement les prochains articles :) ! Enjoy

]]>
By: Sam http://sametmax.com/les-context-managers-et-le-mot-cle-with-en-python/#comment-1694 Sam Tue, 04 Sep 2012 01:49:04 +0000 http://sametmax.com/?p=1987#comment-1694 Yes, bien vu. Typo corrigée. Yes, bien vu. Typo corrigée.

]]>
By: fero14041 http://sametmax.com/les-context-managers-et-le-mot-cle-with-en-python/#comment-1690 fero14041 Mon, 03 Sep 2012 23:42:37 +0000 http://sametmax.com/?p=1987#comment-1690 C'est beau, merci! Une remarque ou question à propos (mais (pré)<i>caution</i>: yeux dans le cirage): dans la section "<em>Un exemple utile de context manager</em>", j'aurais naïvement référencé la variable <code>curdir</code> comme <em>attribut</em> de l'instance, non? class Cd(objet): #... méthodes précédentes ... def __exit__(self, type, value, traceback): os.chdir(self.curdir) </pre> C’est beau, merci! Une remarque ou question à propos (mais (pré)caution: yeux dans le cirage): dans la section “Un exemple utile de context manager“, j’aurais naïvement référencé la variable curdir comme attribut de l’instance, non?

class Cd(objet):
#… méthodes précédentes …

def __exit__(self, type, value, traceback):
os.chdir(self.curdir)

]]>