は、ここでの使用例です:
try:
with open('filename') as f:
do_stuff_that_depends_on_the_existence_of_the_file(f)
except IOError as e:
print 'Trouble opening file'
あなたはまったくアクセスしてファイルを開いている場合は、OSは、ファイルが存在することを保証する、またはそうでなければエラーで失敗します。アクセスが排他的である場合、ファイルの競合する他のプロセスは、あなたによってブロックされるか、ブロックされます。
try
は、PythonのファイルI/O APIが通常はリターンコードを持たないため(例外が代わりに使用されるため)、ファイルを開く行為のエラーまたは成功を検出する方法です。あなたの質問に本当に答えるためには、競合状態を避けるのはtry
ではありません。それはopen
です。これは基本的にC(Pythonのベース)と同じですが、例外はありません。詳細についてはthisをお読みください。
tryブロック内のファイルへのアクセスに依存するコードを実行することをお勧めします。ファイルを閉じると、その存在はもはや保証されません。
os.path.exists
を呼び出すと、ファイルが存在する場合と存在しない場合があり、ファイルの存在を知らない時点でスナップショットが表示されるだけです。os.path.exists
が返されます。悪意のあるコードや予期しないロジックは、期待していないときにファイルを削除または変更する可能性があります。運転する前に道路がはっきりしていることを確認するために頭を回すのと同じです。一度あなたの頭を元に戻すと、あなたはもはや見ていないところで起こっていることを推測するだけです。ファイルを開いたままにしておくと、運転時に(良好または悪い場合)可能ではない、一貫した状態の延長が保証されます。 :)
try/open
を使用するのではなくファイルが存在しないかどうかの確認は、スナップショットの性質がos.path.exists
であるため、依然として不十分です。残念ながら、すべての場合にディレクトリ内にファイルが作成されるのを防ぐ方法がないので、ファイルがないことを確認することが最善の方法だと思います。
@downvoter - reasoning?問題はありますか? – Mike