首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Path('foo').exists() != bool(Path('foo'))

Path('foo').exists() != bool(Path('foo'))
EN

Stack Overflow用户
提问于 2020-02-18 06:13:42
回答 1查看 142关注 0票数 1

我试着改变我的问题,使其更少地基于观点。

当文件系统路径不存在时,将pathlib.Path对象强制/求值为False有什么缺点?

例如,pathlib.Path可以使用任何__bool__逻辑编写,因为它只是一个Python类

代码语言:javascript
复制
class Path(object):
    def __init__(self, path):
        self.path_ = path

    def __bool__(self):
        return self.checkIfExistsOnFileSystemOrNot_()

    def path(self):
        return self.path_

    def checkIfExistsOnFileSystemOrNot_(self):
        # any logic here ...

    ...

我知道您可能想要构建一个在python程序中不存在的文件路径,但是您想在什么时候这样做呢?

代码语言:javascript
复制
if path:
   # do something with the path "assuming" it exits on the filesystem (and not just that it's not falsy)

我同意这一点

代码语言:javascript
复制
if path.exists():
    # ...

这不是更多的努力,但考虑到我一直在语言之间跳跃,这给我带来了一些痛苦。

EN

回答 1

Stack Overflow用户

发布于 2020-02-18 06:27:21

现在问题已经改变了,我在原始答案中提出的最后一点可能是最重要的:清晰度。

The Zen of Python说:

Explicit比implicit更好。

的可读性很重要。

Path对象上显式调用.exists()非常清楚。一个不熟悉Python的新程序员可以阅读

代码语言:javascript
复制
if some_path.exists():
    # ...

或许能理解它。但

代码语言:javascript
复制
if some_path:
    # ...

就不那么清楚了。

我一直在不同的语言之间跳跃,这给我带来了一些痛苦。

惯用的Python和惯用的Ruby、C#或Scala都是不同的。那好吧。

现在,回到老答案的其余部分:

pathlib不仅仅用于表示特定可见文件系统上的文件和文件夹。它用于表示和操作路径本身(粗体添加):

此模块提供了表示文件系统路径的类,这些类具有适合不同操作系统的语义。路径类分为concrete paths,前者提供没有I/O的纯计算操作,后者继承自纯路径,但也提供I/O操作。

您甚至可以在Linux系统上操作Windows样式的路径,反之亦然。

将路径的真实性减少到“这个文件存在吗?”看起来像是一个奇怪的设计决定。特别是当关于文件和目录还有其他布尔问题时:它是可读的吗?可写?可执行文件?符号链接?一个目录?常规文件?先进先出?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60271121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档