Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么路径(…)是真的,即使路径不存在';不存在?_Python_Windows_Directory_Pathlib - Fatal编程技术网

Python 为什么路径(…)是真的,即使路径不存在';不存在?

Python 为什么路径(…)是真的,即使路径不存在';不存在?,python,windows,directory,pathlib,Python,Windows,Directory,Pathlib,我应该要求用户输入一个目录,如果该目录不存在,我们会告诉他们,然后为他们创建一个目录 这是到目前为止我的代码。无论输入其路径的目录是否实际存在,它的作用都是相同的。 在windows上使用pathlib时会发生这种情况。 报告的错误 因为您必须调用.exists方法。见: >>> p = pathlib.Path("/Users/juan") >>> p.exists # this just returns the method object <bou

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

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

因为您必须调用
.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
p=pathlib.Path(“/Users/juan”) >>>p.exists#这只返回方法对象 >>>p.存在() 符合事实的
方法/函数对象的求值总是
True
,因此您总是看到路径存在。

您使用的mkdir位于
pathlib
中(一些注释假设
os.mkdir

Path.mkdir(mode=0o777,parents=False,exist\u ok=False)

创建一个新的 此给定路径上的目录。如果给定了模式,则它与 进程的umask值确定文件模式和访问标志。 如果该路径已存在,则引发
fileexisterror

如果parents为true,则此路径的任何缺少的父级都将创建为 需要;它们是使用默认权限创建的,无需 考虑模式(模仿POSIX mkdir-p命令)

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

如果exist\u ok为false(默认值),则如果 目标目录已存在

如果exist\u ok为true,则将忽略
文件EXISTSERROR
异常(相同 行为(如POSIX mkdir-p命令),但仅当最后一条路径 组件不是现有的非目录文件

在版本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)

嗯??“mkdir如何工作”的正确答案将涉及系统调用和文件系统设计,但这似乎不是您真正想知道的。@CharlesDuffy我的错,我应该用不同的措辞来命名我的标题。@CharlesDuffy-Hm,我尝试了您所说的,并输入了一个无效的目录,但出于某种原因,我的前半段代码似乎说一切都存在。你知道它出了什么问题吗?Mkdir()有一个你必须传递给它的参数。Python可能不允许您这样做,但您确实需要为目录命名。@加速,
p.exists
没有调用名为
exists
的函数;它返回对函数本身的引用;由于该引用既不是
None
False
0
,等等(并且没有
\uuuuuubool\uuuu
方法来表示相反),因此它在布尔上下文中计算为true。(我猜您来自Ruby世界,
object.funcname
调用名为
funcname
的函数?这里不是这样;它返回该函数的句柄,您需要调用它,作为
object.funcname()
,才能真正调用它)。
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)