Search code examples
pythonfileattributeerror

Python AttributeError: NoneType object has no attribute 'close'


I am learning python and I wrote a script that copies the content of one text file to another.

Here is my code.

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

I get the AttributeError listed on the title. Why is it that wen I call the write method on open(argv[2], 'w') the out_file is not assigned a File type?

Thank you in advance


Solution

  • out_file is being assigned to the return value of the write method, which is None. Break the statement into two:

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

    And really, it'd be preferable to do this:

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

    Using with with statement means Python will automatically close in_file and out_file when execution leaves the with block.