Python unclosedリソース:ファイルを削除するのは安全ですか?

StackOverflow https://stackoverflow.com//questions/21057942

  •  22-12-2019
  •  | 
  •  

質問

この問題を中心にして私の道をグーグルしましたが、どんな解決策も見つかりませんでした。私はEclipseとPydevプラグインを使ってPython 3.3を実行しています、そして私がPythonプロジェクトを実行するとき、私は次のメッセージを受け取ります:

/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/update_checker.py:37: ResourceWarning: unclosed file <_io.BufferedReader name='/var/folders/x4/st67yr0x6qg7znh7sdfr94kh0000gn/T/update_checker_cache.pkl'>
  permacache = pickle.load(open(filename, 'rb'))
.

私はPythonに新しく、私はこれが何を意味するのかわかりません。削除しても安全なことを確認するためにこれを削除する前に尋ねたかった。これはどういう意味ですか?開いているファイルがある...しかし、なぜPythonが私に不平を言っているのですか?私はPROWライブラリを使っています、それが違いを生み出すならば。

Update:私のコードはここでSourceForge しかし、それは確実にエラーを起こしていない(2つの異なるコンピュータで試してみました)。エラーが発生したら、それは決して消えません。

役に立ちましたか?

解決

このリソースwarningはファイルを開いたことを意味し、それを使用したが、その後 close のファイルを忘れたことを意味します。Pythonは、ファイルオブジェクトがデッドであることが通知されたときにそれを閉じますが、これは何らかの不明な時間が経過した後にのみ発生します。したがって、最近のバージョンでは、Pythonはそれがそうすると履歴書を印刷します。それはあなたがすぐに閉じられていないファイルがどこにあるかをすばやく識別し、それらを正しく閉じてください。同時にN個のファイルを開くことができないいくつかのプラットフォームでは重要かもしれません(例えば1024)。また、Windows上では、まだ開いている場合はファイルを使用していくつかの操作を行うことはできません(たとえばそれを削除します)。

この場合、ファイルupdate_checker.pyの行は、次のように修正する必要があります。

with open(filename, 'rb') as f:   # will close() when we leave this block
    permacache = pickle.load(f)
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top