关于python:当目录不存在时,os.mkdir(path)返回OSError

os.mkdir(path) returns OSError when directory does not exist

我打电话给os.mkdir创建一个文件夹,其中包含一组生成的数据。但是,即使我指定的路径尚未创建,os.mkdir(path)也会引发一个已存在该路径的osError。

例如,我调用:

1
os.mkdir(test)

这个调用会导致OSError: [Errno 17] File exists: 'test',即使我在任何地方都没有测试目录或名为test的文件。

注意:我使用的实际路径名不是"test",而是一些更模糊的东西,我确信它不会在任何地方命名。

救命,求你了?


格雷格的回答是正确的,但不够深入。OSError有子错误条件,您不希望每次都抑制它们。谨慎的做法是捕获预期的操作系统错误。

在决定抑制异常之前,请执行其他检查,如下所示:

1
2
3
4
5
6
7
8
9
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。(只读文件系统)等等,或者你确实想这样做——但是这需要一个基于你所构建内容的特定逻辑的有意识的决定。

greg的代码抑制所有操作系统错误;这是不安全的,就像except Exception是不安全的。


只需检查路径是否存在。如果不创建它

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


在python 3.2及更高版本中,可以使用:

埃多克斯1〔8〕

以避免在目录已存在时出现异常。如果path存在而不是目录,这仍然会引发异常。


我还面临同样的问题,特别是当字符串"test"包含多个目录名时。所以当"test"包含单个目录时-

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

如果"test"包含多个目录,如'dir1dir2',则-

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


在Windows上发生在我身上,也许就是这样:

像你一样,我试图:

1
os.mkdir(dirname)

找到了OSError: [Errno 17] File exists: ''。当我跑步时:

1
os.path.exists(dirname)

我弄错了,这让我有一段时间发疯了:)

问题是:在某个窗口中,我在特定的目录下。即使它当时不存在(我从Linux中删除了它)。解决方案是关闭该窗口导航到其他地方。可耻,我知道…


您在那里有一个名为test的文件。不能用相同的名称创建目录。


我不知道你的文件系统的细节。但如果你真的想避开这个问题,可以使用try/except子句?

1
2
3
4
try:
    os.mkdir(test)
except OSError:
    print"test already exists"

您可以同时进行某种调试。


可能那个目录中有一个名为test的隐藏文件夹。手动检查是否存在。

江户十一〔一〕号

仅当文件不存在时才创建该文件。

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