Need help with "with-statement-compatible" object

Peter Otten __peter__ at web.de
Wed Dec 19 04:14:58 EST 2007


Dmitry Teslenko wrote:

> Hello!
> I've made some class that can be used with "with statement". It looks this way:
> 
> class chdir_to_file( object ):
> ...
> 	def __enter__(self):
> ...
> 
> 	def __exit__(self, type, val, tb):
> ...
> def get_chdir_to_file(file_path):
> 	return chdir_to_file(file_path)
> ...
> 
> Snippet with object instantiation looks like this:
> 	for s in sys.argv[1:]:
> 		c = chdir_to_file( s )
> 		with c:
> 			print 'Current directory is %s' % os.path.realpath( os.curdir )
> 
> That works fine. I want to enable it to be used in more elegant way:
> for s in ... :
>         with get_chdir_to_file( s ) as c:
>                    c.do_something()
> 
> But python complains c is of NoneType and has no "do_something()". Am
> I missing something?

Does the chdir_to_file class have a do_something() method? If so,
changing chdir_to_file.__enter__() to 

def __enter__(self):
    # ...
    return self

should help.

Peter



More information about the Python-list mailing list