python os.path.isfile()对于某些整数返回True

python os.path.isfile()对于某些整数返回True,python,python-3.x,file,path,Python,Python 3.x,File,Path,我肯定错过了一些显而易见的东西。当给定标量值时,os.path.isfile()如何返回True >>> for i in range(0,20): print(os.path.isfile(i)) ... False False False False False False False False False False False False False True True True True True True True 我正在从一个空目录执行此操作。Pyth

我肯定错过了一些显而易见的东西。当给定标量值时,
os.path.isfile()
如何返回
True

>>> for i in range(0,20):    print(os.path.isfile(i))
... 
False
False
False
False
False
False
False
False
False
False
False
False
False
True
True
True
True
True
True
True
我正在从一个空目录执行此操作。Python 3.6。我已经查看了关于
os.path.isfile()
的其他问题,但没有找到答案。

都在文档中:

  • 如果路径是“现有”常规文件,则返回
    True
  • 如果返回
    True
  • 由于3.3版path可以是整数-如果它是一个打开的文件描述符
    os.path.exists
    返回
    True
  • 是与当前进程打开的文件相对应的小整数。例如,标准输入通常为文件描述符0,标准输出为1,标准错误为2。由进程打开的其他文件将被分配3、4、5等。(名称“文件描述符”有点欺骗性;在Unix平台上,文件描述符也会引用套接字和管道。)

真奇怪。我不能复制这个。无论您的工作目录是什么,您都会得到相同的结果吗?在我的用户目录-windows中,我得到了I=2的真值
os.path.isfile(2)
->
True
无论目录如何。@khelwood结果不同。不确定是否取决于工作目录或其他什么东西使用
os.stat
?@khelwood它适用于i=0,1和2,输出:os.stat\u result(st_mode=8592,st_ino=3,st_dev=23,st_nlink=1,st_uid=1000,st_gid=5,st_size=0,st_atime=1595876800,st_mt=1595876800,st_ctime=1595513032)谢谢。恐怕我还是不明白我的价值观是从哪里来的。所以,你能用外行的话解释一下,为什么有13次错误,然后是7次错误?每次进程打开一个“文件”,它都会被分配一个整数“文件描述符”。如果该“文件”是常规文件,
os.path.isfile
将在该整数上返回
True
。谢谢!但按照我理解你的解释,它应该先分配较低的值。那么,为什么首先会有一堆错误的值呢?可能它在过去打开了其他文件,这些文件的描述符现在已关闭,但在后来的文件被打开时却没有。运行
strace
或类似程序以查找,和/或查看这些打开的描述符指向何处;我猜是Python本身和您的脚本文件,以及Python使用的一些系统库。