web-dev-qa-db-ja.com

python-特にファイルが存在する場合の例外処理

このフォーラムで、errnoOSError値(またはIOErrorこれらの日?)の値をテストすることで特定のエラーが処理される例を見つけました。たとえば、ここのいくつかの議論- Pythonの「open()」は「ファイルが見つかりません」に対して異なるエラーをスローします-両方の例外を処理する方法? 。しかし、それは正しい方法ではないと思います。結局のところ、FileExistsErrorは、errnoについて心配する必要がないようにするために特別に存在しています。

トークンFileExistsErrorのエラーが発生したため、次の試行は機能しませんでした。

try:
    os.mkdir(folderPath)
except FileExistsError:
    print 'Directory not created.'

このエラーや他の同様のエラーを具体的にどのように確認しますか?

20
cogitoergosum

コードによるとprint ...、Python 2.xを使用しているようです。 FileExistsError がPythonに追加されました3.3; FileExistsErrorは使用できません。

使用する - errno.EEXIST

import os
import errno

try:
    os.mkdir(folderPath)
except OSError as e:
    if e.errno == errno.EEXIST:
        print('Directory not created.')
    else:
        raise
30
falsetru

これは、既存のシンボリックリンクを で原子的に上書きしようとするときに競合状態を処理する例です

# os.symlink requires that the target does NOT exist.
# Avoid race condition of file creation between mktemp and symlink:
while True:
    temp_pathname = tempfile.mktemp()
    try:
        os.symlink(target, temp_pathname)
        break  # Success, exit loop
    except FileExistsError:
        time.sleep(0.001)  # Prevent high load in pathological conditions
    except:
        raise
os.replace(temp_pathname, link_name)
0
Tom Hale