3

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

到目前为止,这是我的代码。无论输入路径的目录是否实际存在,它都以相同的方式起作用。在 Windows 上使用 pathlib 时会发生这种情况。已报告 问题 35692 的错误

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()
4

2 回答 2

5

因为你必须调用.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,因此您总是看到路径存在。

于 2017-07-19T23:09:08.483 回答
0

您正在使用的 mkdir 是这个pathlib一些评论是假设的os.mkdir

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

如果 parents 为真,则根据需要创建此路径的任何缺少的 parent;它们是使用默认权限创建的,不考虑模式(模仿 POSIX mkdir -p 命令)。

如果 parents 为 false(默认值),则缺少的 parent 会引发 FileNotFoundError。

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

如果exist_ok 为真,FileExistsError异常将被忽略(与POSIX mkdir -p 命令的行为相同),但前提是最后一个路径组件不是现有的非目录文件。

在 3.5 版更改: 添加了 exists_ok 参数。

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

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

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

最好把它包起来mkdirtry/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)
于 2017-07-19T23:09:20.633 回答