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
.
None
是 False
-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
我正在使用一些非常标准的代码:
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
.
None
是 False
-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