python:为什么os.makedirs会导致WindowsError?

在python中,我创建了一个函数来创建一个不存在的目录。

def make_directory_if_not_exists(path):
    try:
        os.makedirs(path)
        break    
    except OSError as exception:
        if exception.errno != errno.EEXIST:
            raise

在Windows上,有时我会得到以下异常:

WindowsError: [Error 5] Access is denied: 'C:...my_path'

它似乎发生在Windows文件浏览器中打开目录时,但我无法可靠地重现它。 所以,我只是做了以下解决方法。

def make_directory_if_not_exists(path):
    while not os.path.isdir(path):
        try:
            os.makedirs(path)
            break    
        except OSError as exception:
            if exception.errno != errno.EEXIST:
                raise
        except WindowsError:
            print "got WindowsError"
            pass       

这里发生了什么,例如,Windows mkdir何时会提供这样的访问错误? 有更好的解决方案吗?


一个小小的Google搜索表明,这种错误在各种不同的情况下都会出现,但其中大多数都与权限错误有关。 该脚本可能需要以管理员身份运行,或者可能会使用您尝试使用的其中一个目录打开另一个程序。


您应该使用OSError以及IOError。 看到这个答案,你会使用像这样的东西:

  def make_directory_if_not_exists(path):
    try:
        os.makedirs(path)
    except (IOError, OSError) as exception:
        if exception.errno != errno.EEXIST:
           ...

在你的问题上更好的解决方案,我会在这里使用简单明了的三行代码:

def make_directory_if_not_exists(path):
    if not os.path.isdir(path):
        os.makedirs(path)
链接地址: http://www.djcxy.com/p/14651.html

上一篇: python: why does os.makedirs cause WindowsError?

下一篇: questions regarding the design of std::initializer