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)