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
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to