1

我得到属性错误:'int' 对象没有属性'write'。

这是我脚本的一部分

data = urllib.urlopen(swfurl)

        save = raw_input("Type filename for saving. 'D' for same filename")

        if save.lower() == "d":
        # here gives me Attribute Error

            fh = os.open(swfname,os.O_WRONLY|os.O_CREAT|os.O_TRUNC)
            fh.write(data)

        # #####################################################

这是错误:

Traceback (most recent call last):
  File "download.py", line 41, in <module>
    fh.write(data)
AttributeError: 'int' object has no attribute 'write'
4

2 回答 2

3

os.open返回文件描述符。用于os.write写入打开的文件

import os
# Open a file
fd = os.open( "foo.txt", os.O_WRONLY | os.O_CREAT | os.O_TRUNC)
# Write one string
os.write(fd, "This is test")
# Close opened file
os.close( fd )

如果您不需要任何低级 API,或者更好地使用 python 文件

with open('foo.txt', 'w') as output_file:
    output_file.write('this is test')
于 2013-06-02T19:46:59.810 回答
1

os.open()返回文件描述符(整数),而不是文件对象。从文档

注意:此函数适用于低级 I/O。对于正常使用,使用内置函数open(),它返回一个带有read()write()方法(以及更多)的“文件对象”。要将文件描述符包装在“文件对象”中,请使用fdopen().

您应该改用内置open()函数:

fh = open(swfname, 'w')
fh.write(data)
fh.close()

或上下文管理器:

with open(swfname, 'w') as handle:
    handle.write(data)
于 2013-06-02T19:48:04.613 回答