3

私はライブラリを使用して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'

pathlib ドキュメントで定義されている構文に従っていると思います(ただし、おそらくあいまいな方法ではありません)。

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

私は何を間違っていますか?

4

2 に答える 2

4

ほぼ確実に、という名前のカスタム クラスを定義しているPath(または、別のモジュールから Path をインポートした)。どちらの場合でも、そのパスは pathlib からのパスを覆い隠します。確認するには、実行します

print(Path.__module__)

Pathどのモジュールから来ているかを調べるために。

于 2015-12-18T13:15:07.213 に答える
1

読みやすくするために、私はPath.joinpathを使用することを好みます。あなたの場合、それは次のようになります:

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

したがって、 * 演算子を使用でき、長い行の場合はより快適になります。ライブラリが提供するツールを使用すると、詳細が処理されるため、これらのエラーが発生しないことが保証されます。

于 2015-12-18T13:16:26.053 に答える