2

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

 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')

我删除了目录,并且12. 我超越了这一点,并点击了错误消息3

但是,当我检查时,目录已成功创建。

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

我错过了什么??

4

2 回答 2

5

os.makedirs不通过它的返回值表明它是否成功:它总是返回None.

NoneFalse因此,is -y not os.makedirs(args.outputDirectory, 0o666)is always 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抛出,则表示目录已成功创建。

于 2015-06-25T14:15:33.727 回答
3

你不需要打电话os.path.exists()(或os.path.isdir());os.makedirs()exist_ok参数。

正如@Thomas Orozco 提到的那样,您不应该检查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()基于 - 的解决方案不同;如果路径存在但它不是目录(或目录的符号链接),则会引发错误。

mode参数可能存在问题,请参阅 3.4.1 之前的 Python 版本的注释

于 2015-06-25T21:09:34.143 回答