this is i saw in someone's code:
def __exit__(self, type, value, tb):
from __future__ import with_statement#for python2.5
def __exit__(self ,type, value, traceback):
with a() as s:
Using these magic methods (
__exit__) allows you to implement objects which can be used easily with the
The idea is that it makes it easy to build code which needs some 'cleandown' code executed (think of it as a
try-finally block). Some more explanation here.
A useful example could be a database connection object (which then automagically closes the connection once the corresponding 'with'-statement goes out of scope):
class DatabaseConnection(object): def __enter__(self): # make a database connection and return it ... return self.dbconn def __exit__(self, exc_type, exc_val, exc_tb): # make sure the dbconnection gets closed self.dbconn.close() ...
As explained above, use this object with the
with statement (you may need to do
from __future__ import with_statement at the top of the file if you're on Python 2.5).
with DatabaseConnection() as mydbconn: # do stuff
PEP343 -- The 'with' statement' has a nice writeup as well.