[英]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
。
None
是False
-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.