2015-12-18 2 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)? Скорее всего, вы определили свой собственный класс 'Path'. Кроме того, этот вопрос будет значительно улучшен путем публикации полезной информации для отладки, а именно выходов «print (Path .__ module __)» и «import sys; print (sys.modules [Path .__ module __])». – phihag

+0

К сожалению, я уже нашел свою ошибку. Вместо 'from pathlib import Path' я имел' from unipath import Path'. – physicalattraction

ответ

1

Почти наверняка вы определили пользовательский класс с именем Path (или импортированный путь из другого модуля). В любом случае этот путь затмевает одно из pathlib. Чтобы проверить, запустите

print(Path.__module__) 

, чтобы выяснить, какой модуль Path откуда.

+0

Это действительно проблема. Я импортировал путь 'unipath' вместо' pathlib'. – physicalattraction

1

Для удобства чтения я предпочитаю использовать Path.joinpath. В вашем случае это будет:

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

Таким образом, вы можете использовать * operator, а для длинных линий - более комфортно. Используя инструменты, предоставленные библиотекой, вы не столкнетесь с этими ошибками, так как они обрабатывают детали для вас.

Смежные вопросы