3

我正在尝试创建一个与withPython 中的关键字很好地配合的对象。我知道您必须创建__enter____exit__方法,但我不太确定如何操作对象。作为一个具体的例子,我编写了一个创建本地工作空间并在退出时清理的类:

import tempfile, os, shutil
class temp_workspace(object):

    def __enter__(self):
        self.local_dir = os.getcwd()
        self.temp_dir  = tempfile.mkdtemp()
        os.chdir(self.temp_dir)

    def __exit__(self, exc_type, exc_value, traceback):
        os.chdir(self.local_dir)
        shutil.rmtree(self.temp_dir)

    def __repr__(self):
        return self.temp_dir

这工作得很好,但是当我尝试打印本地目录名称时:

with temp_workspace() as T:
    print "Temp directory name is ", T

它显示为None__repr__甚至没有被调用!这真的很令人困惑,因为Tis also NoneType。我究竟做错了什么?

4

1 回答 1

5

您没有从上下文管理器协议__enter__指定的返回对象。添加到方法的末尾。return self__enter__

于 2013-01-21T04:57:03.577 回答