Python在一次写入后关闭文件()

Python在一次写入后关闭文件(),python,file,file-io,Python,File,File Io,我正在使用Python版本2.7.10和macOS Sierra 10.12.16以及Xcode 8.3.3 在演示程序中,我想在一个文件中写入两行文本。 这应该分两步完成。在第一步中,调用方法openNewFile()。使用open命令创建文件,并向文件中写入一行文本。文件句柄是方法的返回值。 在第二步中,调用方法closeNewFile(fH),将文件句柄fH作为输入参数。第二行文本应写入文件并关闭文件。但是,这会导致错误消息: Traceback (most recent call la

我正在使用Python版本2.7.10和macOS Sierra 10.12.16以及Xcode 8.3.3 在演示程序中,我想在一个文件中写入两行文本。 这应该分两步完成。在第一步中,调用方法openNewFile()。使用open命令创建文件,并向文件中写入一行文本。文件句柄是方法的返回值。 在第二步中,调用方法closeNewFile(fH),将文件句柄fH作为输入参数。第二行文本应写入文件并关闭文件。但是,这会导致错误消息:

 Traceback (most recent call last):
  File "playground.py", line 23, in <module>
    myDemo.createFile()
  File "playground.py", line 20, in createFile
    self.closeNewFile(fH)
  File "playground.py", line 15, in closeNewFile
    fileHandle.writelines("Second line")
ValueError: I/O operation on closed file
Program ended with exit code: 1
我做错了什么?
如何解决这个问题?

您对
与…的关系有误,正如
所做的那样。以下代码是罪魁祸首:

 with open(myDemoFile, "w") as f:
    f.writelines("First line")
    return f
在返回之前,
with
关闭文件,因此您最终从函数返回一个关闭的文件

我应该补充一点——在一个函数中打开一个文件并返回它而不关闭它(您的实际意图是什么)是主要的代码气味。也就是说,解决此问题的方法是使用…as
上下文管理器摆脱

f = open(myDemoFile, "w") 
f.writelines("First line")
return f

对此的一个改进是,不要摆脱上下文管理器,而是在上下文管理器中执行所有I/O。不具有单独的打开和写入功能,也不分段I/O操作。

能否提供打开/关闭文件的代码?与open()一起使用时,上下文管理器会自动关闭文件
f = open(myDemoFile, "w") 
f.writelines("First line")
return f