0

ファイルを開くときの連鎖メソッドの場合、例:

indata = open(from_file).read()

open()関数で開いたファイルハンドルを閉じる必要がありますか(または可能ですか) ?

そうでない場合は、代わりに次のことを行うのがベストプラクティスですか。

infile = open(from_file)
indata = infile.read()
infile.close()
4

1 に答える 1

2

ファイルオープン時の連鎖方式の場合

これは、ファイルを開くチェーン メソッドの落とし穴です。そのため、推奨される解決策は、with clause. オブジェクトの存続期間はwithブロック内にあり、fileObj は自動的に閉じられます

with open(from_file) as fin:
    indata = fin.read()

なぜそれが間違っているのですか?

  1. あなたはファイルを閉じるためにGCに翻弄されています
  2. 例外が発生した場合、開いている間または読み取り中に例外が発生した場所がわからない場合があります

他のコード片

infile = open(from_file)
indata = infile.read()
infile.close()

落とし穴もあります。

  1. 例外が発生した場合、ファイルが閉じられない可能性があります
  2. コードが別の経路をたどる可能性があり、close ステートメントが実行されない可能性があります
于 2013-03-01T05:29:40.087 に答える