ОС.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"
вы всегда можете сделать какую-то отладку в то же время.
случилось со мной на 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)