3

ファイルを明示的に閉じずにファイルに直接書き込むクラスメソッドを定義したいと思います。しかし、私がそのようにオブジェクトを返す場合:

class sqlBuilder(object):
    ...   

    def save_sql_stat(self, file_n, mode = 'w'):
        try:
            with open(file_n, mode) as sql_out:
                return sql_out

        except IOError, IOe:
            print str(IOe)

私はできなくなります:

t = sqlBuilder(table)
out = t.save_sql_stat(sql_file)
out.write(...)

を取得するのでValueError。電話をかけずに良い回避策は何でしょうout.close()か?

4

1 に答える 1

5

closingfromを使用してステートメントを外側contextlibに移動できます...with

from contextlib import closing

def save_sql_stat(self, file_n, mode='w'):
    try:
        return closing(open(file_n, mode))
    except IOError as e:
        print e.message

sql = SqlBuilder()
with sql.save_sql_stat('testing.sql') as sql_out:
    pass # whatever
于 2012-10-01T09:02:48.200 に答える