为什么即使路径不存在,Path(...)。也存在?

时间:2017-07-19 22:54:13

标签: python directory

我应该要求用户输入一个目录,如果该目录不存在,我们会告诉他们,然后为他们创建一个目录。

到目前为止,这是我的代码。无论输入路径的目录是否存在,它都以相同的方式起作用。

import pathlib
from pathlib import Path

def directory():

    p = Path(input("Enter file path: "))

    if p.exists:

        print('Exists')

        return p

    else:

        print('Directory does not exist. Making directory for you.')

        p.mkdir()



directory()

2 个答案:

答案 0 :(得分:1)

因为您必须调用 .exists方法。参见:

>>> p = pathlib.Path("/Users/juan")
>>> p.exists # this just returns the method object
<bound method Path.exists of PosixPath('/Users/juan')>
>>> p.exists()
True

方法/函数对象总是评估为True,因此您总是看到路径存在的原因。

答案 1 :(得分:0)

您使用的mkdir在pathlib this one Packages(部分评论假设为os.mkdir

  

Path.mkdir(mode=0o777, parents=False, exist_ok=False)
  创建一个新的   此给定路径的目录。如果给出了模式,则将其与   进程'umask值,用于确定文件模式和访问标志。   如果路径已存在,则会引发FileExistsError

     

如果父母是真的,那么这条道路的任何失踪父母都被创建为   需要;它们是使用默认权限创建的,无需考虑   考虑模式(模仿POSIX mkdir -p命令)。

     

如果父母是假的(默认),则父母失踪   FileNotFoundError。

     

如果exist_ok为false(默认值),则会引发FileExistsError   目标目录已存在。

     

如果exist_ok为true,则FileExistsError例外将被忽略(相同   行为如POSIX mkdir -p命令),但仅限于最后一个路径   component不是现有的非目录文件。

     

在版本3.5中更改:添加了exist_ok参数。

如果提供有效的路径,它应该可以在没有参数的情况下正常工作。

请注意,如果您想检查它是否存在,则需要调用exists()方法 - 不要忘记()

但是,这不是一个好方法,因为其他人可以在您检查它和创建它之间的那条路径上创建目录(或文件)。这被称为竞争条件。

最好将mkdir包裹在try/except中,让操作系统告诉您是否存在问题。异常的可能性远远超过现有的可能性。例如

def directory():

    p = Path(input("Enter file path: "))
    try:
        p.mkdir()
        print('Directory does not exist. Making directory for you.')
    except IOError as ex:
        print('Couldn't create directory', ex)