Pythonでは、を呼び出さずにファイルを開くか、ファイルをclose()
閉じてtry
- finally
または " with
"ステートメントを使用しない場合、これは問題ですか?それとも、すべてのファイルを閉じるためにPythonガベージコレクションに依存するコーディングプラクティスとして十分ですか?たとえば、これを行う場合:
for line in open("filename"):
# ... do stuff ...
...これはファイルを閉じることができず、ファイルを閉じるのを妨げる例外が発生する可能性があるため、これは問題ですか?またはfor
、ファイルが範囲外になるため、ステートメントの最後に確実に閉じられますか?
for
ブロックと関数/クラス/モジュールの区別とは関係ありません。それよりもはるかに単純です。オブジェクトにはスコープがなく、名前だけがあります。このオブジェクトを参照する名前はないため、ここにスコープ内に留まったり、スコープ外に出たりすることはありません。
for
ループに関連付けられたスコープがあるという彼の仮定を修正し、ファイルがまったく異なる理由で閉じられることを述べています。ここでは関係がないため、Pythonのスコープについては説明しません。
for
。その参照カウントはゼロになり、自動的に閉じられますが、Pythonでスコープを定義するのは関数、クラス、およびモジュールのみであり、他の複合ステートメントは定義しません。