Python 为什么路径(…)是真的,即使路径不存在';不存在?
我应该要求用户输入一个目录,如果该目录不存在,我们会告诉他们,然后为他们创建一个目录 这是到目前为止我的代码。无论输入其路径的目录是否实际存在,它的作用都是相同的。 在windows上使用pathlib时会发生这种情况。 报告的错误 因为您必须调用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
.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)