2015-12-18 45 views
0

我使用的庫pathlib構建路徑,並嘗試通過以下方式來建立一個路徑。Python的pathlib不能與/

BASE_DIR = Path(__file__).ancestor(3) 
secrets_file = BASE_DIR/'main_app'/'settings'/'secrets.json' 

但是,運行這個的時候,我得到以下錯誤:

TypeError: unsupported operand type(s) for /: 'Path' and 'str' 

我想我下面作爲pathlibdocumentation定義的語法(但可能我不是一個模糊的方式) 。

>>> p = Path('/etc') 
>>> q = p/'init.d'/'reboot' 

我在做什麼錯?

+0

您可以發佈[*完整*示例](http://stackoverflow.com/help/mcve)?最有可能的是,你已經定義了你自己的類「路徑」。另外,通過發佈有用的調試信息,也就是'print(Path .__ module __)'和'import sys; print(sys.modules [Path .__ module __])'的輸出,這個問題會大大改善。 – phihag

+0

糟糕,我發現我的錯誤了。從'pathlib導入路徑'而不是'我從'unipath導入路徑''有''。 – physicalattraction

回答

1

幾乎可以肯定,你已經定義了一個名爲Path一個自定義類(或從另一個模塊導入路徑)。在任何一種情況下,Path都會忽略pathlib中的一個。要驗證,運行

print(Path.__module__) 

找出哪個模塊Path來自。

+0

確實是這個問題。我導入了'unipath'的Path而不是'pathlib'。 – physicalattraction

1

因爲我更喜歡使用Path.joinpath可讀性。在你的情況下,它將是:

BASE_DIR.joinpath('main_app','settings', 'secrets.json') 

因此,您可以使用*運算符和長行會更舒適。使用庫提供的工具可確保您不會遇到這些錯誤,因爲它們爲您處理細節。