有時候我們常常會看到類似的程式碼:
assert os.path.isdir(path_model_dir) assert os.path.exits(path_model_dir)
如果填入一個相對路徑作為path_model_dir,那將會產生災難性後果。我們需要注意的有以下幾個要素:
os.path.exists() 方法並不會直接使用sys.path中的路徑來尋找文件,它是透過呼叫作業系統的介面來檢查給定路徑是否存在。
當使用相對路徑時,Python會先將其解釋為相對於目前的工作目錄。通常情況下,互動式解釋器的目前工作目錄是啟動解釋器時所在的目錄。
上面這兩段話說明,如果你填入的是相對路徑,這裡所說的相對路徑是相對於目前檔案的相對路徑,還是相對解釋器的相對路徑,是相對運行解釋器,還是調試解釋器,還是相對命令列的中的相對路徑?曾在同一個編輯器裡編輯程式碼,在運行的時候是可以直接運行的,但調試的時候卻一直報錯,後來發現同一編輯器裡的調試解釋器和運行解釋器的相對路徑是不同的(驚!)。
而且os.path.exists() 方法並不會直接使用sys.path中的路徑來尋找文件,也不會使用~/.bashrc中的環境變數來尋找文件,只會根據相對路徑和絕對路徑來尋找文件。
有兩點建議,核心要義在於使用絕對路徑。
直接絕對路徑寫死字串
(推薦)使用__file__拼接出相對於腳本檔案的絕對路徑
有些人問sys.path.append(path)中增加的path是用來幹嘛的,其實這裡面增加的path主要用於import導包的。即如果您想要將其他目錄新增至 Python 的模組搜尋路徑中,可以將這些目錄新增至 sys.path 清單。這將使 Python 在搜尋模組時自動包括這些目錄。但需要注意,這種方法是在 Python 導入模組時使用的,而不是在呼叫 os.path.exists() 方法時。
以上是python中os.path.exits()的坑怎麼解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!