Need help with "with-statement-compatible" object

D

Dmitry Teslenko

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?
 
P

Peter Otten

Dmitry said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,767
Messages
2,569,572
Members
45,045
Latest member
DRCM

Latest Threads

Top