ステートメントがwith
ある場合、次のように、ファイルを開く/例外をチェックする/リソースを手動で閉じる必要がありますか?
try:
f = open('myfile.txt')
for line in f:
print line
except IOError:
print 'Could not open/read file'
finally:
f.close()
ステートメントがwith
ある場合、次のように、ファイルを開く/例外をチェックする/リソースを手動で閉じる必要がありますか?
try:
f = open('myfile.txt')
for line in f:
print line
except IOError:
print 'Could not open/read file'
finally:
f.close()
現在のコードは、ファイルが見つからない、またはアクセス許可が不十分であるなどの例外を処理しようとしますが、with open(file) as f:
ブロックでは処理されません。
また、この場合、finally:
ブロックは定義されていないNameError
ため、a が発生します。f
ブロック内では、ブロック内with
で発生する例外 (コード内のゼロによる除算など、あらゆる種類の例外)が引き続き発生しますが、それを処理しなくても、ファイルは常に適切に閉じられます。それはまったく違うものです。
あなたが望むのはおそらく次のとおりです。
try:
with open("myfile.txt") as f:
do_Stuff() # even if this raises an exception, f will be closed.
except IOError:
print "Couldn't open/read myfile.txt"