Os.mkdir(path) возвращает OSError, когда каталог не существует

Я звоню os.mkdir чтобы создать папку с определенным набором сгенерированных данных. Однако, хотя указанный мной путь не был создан, os.mkdir(path) вызывает ошибку OSError, что путь уже существует.

Например, я звоню:

os.mkdir(test)

Этот вызов приводит к OSError: [Errno 17] File exists: 'test' хотя у меня нет тестовой директории или файла с именем test в любом месте.

ПРИМЕЧАНИЕ: фактическое имя пути, которое я использую, не "test", а нечто более неясное, что, я уверен, нигде не названо.

Помогите, пожалуйста?

Ответы

Ответ 1

Грег ответ правильный, но недостаточно далеко. OSError есть условия, связанные с ошибками, и вы не хотите их подавлять каждый раз. Целесообразно ловить только ожидаемые ошибки ОС.

Выполните дополнительную проверку, прежде чем решите подавить исключение, например так:

import errno
import os

try:
    os.mkdir(dirname)
except OSError as exc:
    if exc.errno != errno.EEXIST:
        raise
    pass

Вы, вероятно, не хотите подавлять errno.EACCES (Отказано в errno.ENOSPC), errno.ENOSPC (Нет свободного места на устройстве), errno.EROFS (Файловая система только для чтения) и т.д. Или, может быть, вы хотите - но для этого нужно быть осознанным решением, основанным на конкретной логике того, что вы строите.

Код Грега подавляет все ошибки ОС; это небезопасно, как except Exception небезопасно.

Ответ 2

Просто проверьте, существует ли путь. если не создать его

if not os.path.exists(test):
        os.makedirs(test)

Ответ 3

В Python 3.2 и выше вы можете использовать:

os.makedirs(path, exist_ok=True)

чтобы избежать получения исключения, если каталог уже существует. Это все равно вызовет исключение, если path существует и не является каталогом.

Ответ 4

Я также столкнулся с той же проблемой, особенно, когда строка 'test' содержит множественное имя каталога. Таким образом, когда "тест" содержит один каталог -

if not os.path.exists(test):
    try:
        os.makedir(test)
    except:
        raise OSError("Can't create destination directory (%s)!" % (test))  

Если 'test' содержит несколько каталогов типа '\ dir1\dir2', тогда -

if not os.path.exists(test):
    try:
        os.makedirs(test)
    except:
        raise OSError("Can't create destination directory (%s)!" % (test))  

Ответ 5

Я не знаю специфики вашей файловой системы. Но если вы действительно хотите обойти это, возможно, используйте предложение try/except?

try:
    os.mkdir(test)
except OSError:
    print "test already exists"

Между тем вы всегда можете сделать какую-то отладку.

Ответ 6

У вас есть файл с именем test. Вы не можете создать каталог с таким же именем.

Ответ 7

Случилось мне в Windows, возможно, это так:

Как и вы, я пытался:

os.mkdir(dirname)

и получил OSError: [Errno 17] File exists: '<dirname>'. Когда я побежал:

os.path.exists(dirname)

Я ошибался, и это немного смутило меня:)

Проблема была: в определенном окне я был в определенном каталоге. Хотя в то время он не существовал (я удалил его из linux). Решение заключалось в том, чтобы закрыть это окно\перейти в другое место. Позорно, я знаю...

Ответ 8

Возможно, в этом каталоге есть скрытая папка с именем test. Вручную проверьте, существует ли он.

ls -a

Создайте файл, только если он не существует.

if not os.path.exists(test):
    os.makedirs(test)

Ответ 9

Для Python 2.7

from distutils.dir_util import mkpath
mkpath(path)