Python - особенно обработать файл существует исключение

Я встречал примеры на этом форуме, где конкретная ошибка вокруг файлов и каталогов обрабатывается путем тестирования значения errno в OSError (или IOError в эти дни?). Например, некоторые обсуждения здесь - Python "open()" выдает разные ошибки для "файла не найден" . - как обрабатывать оба исключения?. Но, я думаю, это неправильный путь. В конце концов, a FileExistsError существует специально, чтобы не беспокоиться о errno.

Следующая попытка не сработала, так как я получил ошибку для токена FileExistsError.

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

Как вы проверяете эту и подобные другие ошибки?

Ответ 1

В соответствии с кодом 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

Ответ 2

Вот пример обращения с состоянием гонки:

# 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)