Python 创建目录失败

Python create directory failing

我正在使用一些非常标准的代码:

 1   if not os.path.exists(args.outputDirectory):
 2       if not os.makedirs(args.outputDirectory, 0o666):
 3           sys.exit('Fatal: output directory "' + args.outputDirectory + '" does not exist and cannot be created')

我删除了目录,1 处的检查下降到 2。我更进一步并在 3 处点击了错误消息。

但是,我查看时,目录创建成功。

drwxrwsr-x 2 userId userGroup  4096 Jun 25 16:07 output/

我错过了什么??

os.makedirs 不表示它是否通过它的 return 值成功:它总是 returns None.

NoneFalse-y,因此,not os.makedirs(args.outputDirectory, 0o666) 始终是 True,这会触发您的 sys.exit 代码路径。


幸运的是,您不需要这些。如果 os.makedirs 失败,它会抛出一个 OSError.

您应该捕获异常,而不是检查 return 值:

try:
    if not os.path.exists(args.outputDirectory):
        os.makedirs(args.outputDirectory, 0o666):
except OSError:
    sys.exit('Fatal: output directory "' + args.outputDirectory + '" does not exist and cannot be created')

如果没有抛出OSError,则表示目录创建成功

您不需要调用 os.path.exists()(或 os.path.isdir()); os.makedirs()exist_ok 个参数。

,你不应该检查 os.makedirs()' return 值,因为 os.makedirs() 通过引发异常来指示错误:

try:
    os.makedirs(args.output_dir, mode=0o666, exist_ok=True)
except OSError as e:
    sys.exit("Can't create {dir}: {err}".format(dir=output_dir, err=e))

注意:不同于基于os.path.exist()的解决方案;如果路径存在但它不是目录(或目录的符号链接),则会引发错误。

mode 参数可能存在问题,see the note for versions of Python before 3.4.1