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

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

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

os.mkdir(test)

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

Примечание: фактическое имя пути, которое я использую, не "тест", но что-то более неясное, что я уверен нигде не назван.

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

8 ответов


ответ Грега верен, но не заходит достаточно далеко. 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.EROFS (Файловая система только для чтения) и т. д. Или может быть, вы хотите но это должно быть сознательное решение, основанное на конкретной логике того, что вы строите.

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


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

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

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

os.makedirs(path, exist_ok=True)

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


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

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

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

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

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

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

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


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


случилось со мной на Windows, может быть, это так:

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

os.mkdir(dirname)

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

os.path.exists(dirname)

я стал ложным, и это сводило меня с ума на некоторое время:)

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


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

ls -a

создать только если он отсутствует

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