- 2009/01/09 20:03
- Python
前に、open()したファイルはエラーが起きてもちゃんと閉じるようにしましょう、ということをやっているサンプルコードを見たことがあったような気がして、うろ覚えながら試しに書いてみた。
def write(path, message):
try:
f = open(path, 'w')
f.write(message)
except IOError, e:
print e
finally:
#print f
f.close()
if __name__ == '__main__':
message = 'test'
write('test.txt', message)
なんとなく、動くのはわかるんだけど、不思議。
fがfinallyに渡るってのが、不思議。
ホントに来てんのか?と思ってprintしてみても、
<open file 'test.txt', mode 'w' at 0x01F1E0F8>
と表示されるから、処理が終わったからなんとなく閉じました、って感じではないっぽい。
ちゃんとclose()されてる。
try-exceptっていうよりは、Pythonのスコープがまだちゃんと理解できてないのかも。
インデントが変わったらスコープも変わる(っていう言い方であってるか自信ないですが、、、)ってことではないのですかね。
例えば関数ごとのスコープになってるとか?
ちょっと調べてみるか。
まぁ何にせよ、try-exceptはさんでfileのcloseが出来るってことがわかっただけでもずいぶん気持ちよくコードがかけます。
- Newer: きたない
- Older: PSYOPのEffect TDのリール
Comments:2
- pes 2009/01/13
お久しぶりです。
お節介かと思いましたが、、、。PythonクックブックP64から引用させてもらいます。
–
openの呼び出しを、このtry/finally文のtry節の中に置かないように注意してほしい(初心者がよくやるミスである)。もしファイルオープンの最中にエラーが起きたら、クローズすべきものが存在しないし、file_objectという名前にバインドされるオブジェクトもないのだ。こんなとき、file_object.close()などと呼びたいと思いますか?
–ちょっと言い方がきついような気がしましたが、、、。
上記の通りだそうです。。。- tai 2009/01/13
>pesさん
ども、お久しぶりです。> もしファイルオープンの最中にエラーが起きたら、クローズすべきものが存在しない
あーーーー、なるほど。
開かない場合に処理できないんですね。> openの呼び出しを、このtry/finally文のtry節の中に置かないように注意してほしい(初心者がよくやるミスである)。
ども、初心者ですwwwwwなるほど、非常に参考になりました。
ありがとうございます。
Trackbacks:0
- Trackback URL for this entry
- http://blog.taikomatsu.com/2009/01/09/python-try-except%e3%81%ae%e3%82%b9%e3%82%b3%e3%83%bc%e3%83%97%e3%81%a3%e3%81%a6%e3%81%a9%e3%81%86%e3%81%aa%e3%81%a3%e3%81%a6%e3%82%93%e3%81%ae/trackback/
- Listed below are links to weblogs that reference
- [Python] try-exceptのスコープってどうなってんの from memlog