我正在使用一些非常标准的代码:
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/
我错过了什么?
答案 0 :(得分:3)
os.makedirs
未指示其是否通过其返回值成功:它始终返回None
。
None
为False
- y,因此,not os.makedirs(args.outputDirectory, 0o666)
始终为True
,会触发您的sys.exit
代码路径。
幸运的是,你不需要这些。如果os.makedirs
失败,则会抛出OSError
。
你应该捕获异常,而不是检查返回值:
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
,则表示目录已成功创建。
答案 1 :(得分:1)
您不需要致电os.path.exists()
(或os.path.isdir()
); os.makedirs()
有exist_ok
参数。
as @Thomas Orozco mentioned,您不应该检查os.makedirs()
'返回值,因为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()
的解决方案不同;如果路径存在但它不是目录(或目录的符号链接),则会引发错误。