4

ファイルを引数として取ることができるクラスがあります。次に例を示します。

ParserClass(file('/some/file', 'rb'))

Python を正しく理解していれば、オブジェクトがガベージ コレクションされると、ファイルは自動的に閉じられます。私が理解していないのは、それがいつ起こるかです。次のような関数で:

def parse_stuff(filename):
    parser = ParserClasss(file(filename, 'rb'))

    return list(parser.info())

parser関数が終了した直後にそのオブジェクトを GC して、ファイルを閉じてはいけませんか? しかし、何らかの理由で、Python は関数が終了した後もずっとファイルを開いているように見えます。または、少なくとも Windows ではファイルを変更できないため、Python がファイルを開いていると主張し、IDLE を閉じるように強制するため、そのように見えます。

作成するすべてのファイルに対して明示的に要求する以外に、ファイルを確実に閉じる方法はありますか? また、これらのクラスは外部であることも付け加えたいと思います。それらを掘り下げて、ファイルの内容を正確に調べたくありません。

4

2 に答える 2

12

ステートメントを使用しwithてファイルを開くことができます。これにより、ファイルが確実に閉じられます。

with open('/some/file', 'rb') as f:
    parser = ParserClasss(f)
    return list(parser.info())

詳細については、 http://www.python.org/dev/peps/pep-0343/を参照してください。

于 2012-10-22T16:03:14.520 に答える
6

を使用withしてファイルを開くことができます。を使用するwithと、ブロックが終了するとファイルが暗黙的に閉じられ、with例外状態も処理されます。

于 2012-10-22T16:03:13.287 に答える