簡體   English   中英

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不會通過返回值指示是否成功:它始終返回None

NoneFalse -y,因此not os.makedirs(args.outputDirectory, 0o666)始終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 ,則表明目錄已成功創建。

您不需要調用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版本說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM