为什么在Python 3.5.2中为文件名指定open()函数的closefd参数必须为True?

为什么在Python 3.5.2中为文件名指定open()函数的closefd参数必须为True?,python,python-3.x,Python,Python 3.x,在Python 3.5.2中,当我使用文件名为open()函数的closefd参数赋值为False时,我得到以下错误: Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: Cannot use closefd=False with file name 在Python中,有两个目的: 从文件名打开给定文件,或 包装表示已打开文件的文件描述符 如果您有一个文件描

在Python 3.5.2中,当我使用文件名为open()函数的closefd参数赋值为False时,我得到以下错误:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Cannot use closefd=False with file name
在Python中,有两个目的:

  • 从文件名打开给定文件,或
  • 包装表示已打开文件的文件描述符
  • 如果您有一个文件描述符,并且希望使用可移植Python函数(而不是模块)来操作它,那么第二个用途非常有用。但是,在这种情况下,当Python文件对象包装器关闭时,文件描述符将关闭,这可能是您不希望的(因为您可能希望文件描述符保持有效以供进一步使用)

    因此,
    open()
    函数提供了一个参数,允许您指定希望文件描述符保持打开状态。由于此行为仅在将文件描述符传递给
    open()
    时才有意义,因此如果尝试将其与文件名一起使用,则会引发错误。

    在Python中,有两个目的:

  • 从文件名打开给定文件,或
  • 包装表示已打开文件的文件描述符
  • 如果您有一个文件描述符,并且希望使用可移植Python函数(而不是模块)来操作它,那么第二个用途非常有用。但是,在这种情况下,当Python文件对象包装器关闭时,文件描述符将关闭,这可能是您不希望的(因为您可能希望文件描述符保持有效以供进一步使用)


    因此,
    open()
    函数提供了一个参数,允许您指定希望文件描述符保持打开状态。由于此行为仅在将文件描述符传递给
    open()
    时才有意义,因此如果尝试将其与文件名一起使用,则会引发错误。

    文档很清楚:如果给定文件名,
    closefd
    必须为
    True
    (默认值),否则将引发错误。你在理解上有什么困难?你在寻找这条规则背后的原因吗?@FrédéricHamidi我理解这句话,但我问了为什么?文档很清楚:如果给定了文件名,
    closefd
    必须是
    True
    (默认值),否则将引发错误。你在理解上有什么困难?你在寻找这条规则背后的原因吗?@FrédéricHamidi我理解这句话,但我问过为什么会这样?
    Python 3.5.2 (default, Jul  5 2016, 12:43:10) 
    [GCC 5.4.0 20160609] on linux