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

iza*_*zak 8 python windows

在python中,我已经创建了一个函数来创建一个目录(如果该目录尚不存在).

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

在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       
Run Code Online (Sandbox Code Playgroud)

这里发生了什么,即Windows什么时候出现mkdir这样的访问错误?有更好的解决方案吗?

J. *_*son 6

您应该使用 OSError 和 IOError。看到这个答案,你会使用类似的东西:

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


小智 4

稍微谷歌搜索一下就会发现这个错误是在各种不同的上下文中引发的,但大多数都与权限错误有关。该脚本可能需要以管理员身份运行,或者可能有另一个程序使用您尝试使用的目录之一打开。