2017-07-15 2 views
-1

"ファイルがPythonで閉じられるようにする"という標準的な答えは、デストラクタは "with"ブロックを終了するときに呼び出されます。をPythonで使用している場合は、 "with"を使用できないときにファイルが閉じられることを確認してください。

しかし、ファイルハンドルを大量のコードにまたがって開いておく必要があるため、そのようなことができない場合はどうですか?たとえば、オブジェクトコンストラクタでファイルハンドルを開いてオブジェクトプロパティに保存し、多くのオブジェクトメソッドでファイルハンドルを参照します。

ファイルハンドルのオープンをメソッド自体に移すことは可能ですが、基本的にはメソッドが呼び出されるたびにファイルをオープン/クローズすることになります。

オブジェクトデストラクタ( "del"メソッド)に "close"コマンドを配置しようとしましたが、これは機能しません。

+0

デストラクタでファイルを閉じるのがなぜ機能しないのですか?あなたはそれを完了したときにオブジェクトが破壊されていませんか?エラーが発生しても失敗した場合、 'try'-'except' -'finally'ブロックでラップすることができます。 – JohanL

+0

カーネルを強制終了してプログラムを終了します(Spyderの大きな停止ボタンを押すなど)。その場合に何が実行されるのかわかりません。 – Stephen

+0

try/except/finallyはもう一度、 "open"コマンドがコンストラクタにありますが、プログラムが移動して他のメソッドからの書き込みを開始するため、おそらく動作しません – Stephen

答えて

0

汚いが簡単な勝利は、ファイル名を開いたときにファイル名を記録し、末尾にfile.close(...)が表示されるようにすることです。リストを保持するか、またはopen()関数(this postの示唆)をラップすると、そのジョブが実行される可能性があります。

投稿check what files are open in Python は、組み込みのファイルオブジェクト、コマンドラインメソッド、モジュールpsutilなどをラッピングするなど、いくつかの解決法を提案しています。

関連する問題