Python 属性错误:NoneType对象没有'close'属性
我正在学习Python,写了一个脚本,用来把一个文本文件的内容复制到另一个文件里。
这是我的代码。
from sys import argv
out_file = open(argv[2], 'w').write(open(argv[1]).read())
out_file.close()
我遇到了标题中提到的AttributeError错误。为什么当我在open(argv[2], 'w')上调用write方法时,out_file没有被分配为文件类型呢?
提前谢谢你们!
2 个回答
2
out_file
是和 函数 write()
的返回值 绑定在一起的;它返回的是 None
。
表达式 open(...).write(...)
是在打开的文件对象上调用 write
方法,但在这个表达式执行完后,打开的文件对象就被丢弃了。在这个表达式执行期间,只有栈在引用它。
你应该把文件对象当作上下文管理器来使用,这样它会 自动 关闭:
with open(argv[2], 'w') as writefile, open(argv[1]) as readfile:
writefile.write(readfile.read())
with .. as ..
语句也只是把打开的文件对象绑定到一些名字上,这样你就可以直接使用这些对象了。
5
out_file
被赋值为 write
方法的返回值,而这个返回值是 None
。把这条语句分成两部分来写:
out_file = open(argv[2], 'w')
out_file.write(open(argv[1]).read())
out_file.close()
其实,最好是这样做:
with open(argv[1]) as in_file, open(argv[2], 'w') as out_file:
out_file.write(in_file.read())
使用 with
语句意味着当程序执行离开 with
块时,Python 会自动关闭 in_file
和 out_file
。