try/exceptブロック内のコードの "古い"バージョンは次のようになります:
out = open(txtFile, 'w')
for line in gzipHandler:
out.write(line)
out.close()
open()...
コンテキストマネージャ a>は事実上同じことです。 Pythonはオブジェクトがガベージコレクトされると自動的にファイルを閉じます(質問575278 を参照してください)、 out
は何らかの理由で実行中の関数が停止すると閉じられます。さらに、OSは、 out.close()
が実行される前に何らかの理由で致命的に失敗した場合、Pythonプロセスが終了するとファイルを閉じます。
with open()
コンテキストマネージャは、次のように展開されます。
out = open(txtFile, 'w')
try:
for line in gzipHandler:
out.write(line)
finally:
out.close()
説明については、上記の「コンテキストマネージャ」のリンクを参照してください。それでどうやって動くの?ファイルを開き、コードブロックを実行して、明示的にファイルを閉じます。私が「古い」バージョンの作品はどのように記述されていますか?ファイルを開き、コードブロックを実行し、スコープが終了したとき、またはPythonプロセスが終了したときに暗黙的にファイルを閉じます。
保存しますが、 "明示的な"対 "暗黙的な"部分の機能は同じです。