Python AttributeError:NoneType对象没有属性' close'

时间:2014-07-26 15:49:53

标签: python file attributeerror

我正在学习python,我编写了一个脚本,将一个文本文件的内容复制到另一个文本文件中。

这是我的代码。

from sys import argv
out_file = open(argv[2], 'w').write(open(argv[1]).read())
out_file.close()

我在标题上列出了AttributeError。为什么我在打开时调用write方法(argv [2],' w')out_file没有分配文件类型?

提前谢谢

2 个答案:

答案 0 :(得分:4)

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语句意味着当执行离开in_file块时,Python将自动关闭out_filewith

答案 1 :(得分:2)

out_file绑定到{em>返回值write() ;它返回None

表达式open(...).write(...)在打开的文件对象上调用write方法,但在表达式完成后,将再次丢弃打开的文件对象本身。执行表达式时,只有堆栈引用它。

您希望将文件对象用作上下文管理器,并且它将自动关闭

with open(argv[2], 'w') as writefile, open(argv[1]) as readfile:
    writefile.write(readfile.read())

with .. as ..语句还将只是打开的文件对象绑定到名称,因此您现在可以直接处理这些对象。