【问题标题】:Python pathlib cannot build path with /Python pathlib 无法使用 / 构建路径
【发布时间】:2015-12-18 13:03:42
【问题描述】:

我正在使用库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 documentation 中定义的语法(但可能我并没有以晦涩难懂的方式)。

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

我做错了什么?

【问题讨论】:

  • 你能发一个complete example吗?很可能,您已经定义了自己的类Path。此外,通过发布有用的调试信息,即print(Path.__module__)import sys;print(sys.modules[Path.__module__]) 的输出,这个问题会得到很大改善。
  • 糟糕,我已经发现了我的错误。而不是from pathlib import Path 我有from unipath import Path

标签: python pathlib


【解决方案1】:

几乎可以肯定,您已经定义了一个名为 Path 的自定义类(或从另一个模块导入的 Path)。在任何一种情况下,该路径都会使来自 pathlib 的路径黯然失色。要验证,请运行

print(Path.__module__)

找出Path来自哪个模块。

【讨论】:

  • 这确实是问题所在。我导入了unipath 的路径而不是pathlib 的路径。
【解决方案2】:

为了便于阅读,我更喜欢使用Path.joinpath。在您的情况下,它将是:

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

因此,您可以使用 * 运算符,对于长行来说它会更舒服。使用库为您提供的工具可确保您不会遇到这些错误,因为它们会为您处理详细信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 2015-02-04
    • 2018-07-19
    • 2021-04-28
    • 1970-01-01
    • 2019-10-12
    相关资源
    最近更新 更多