Python错误类型错误:必须是字符串或缓冲区,而不是实例

Python错误类型错误:必须是字符串或缓冲区,而不是实例,python,typeerror,urllib,Python,Typeerror,Urllib,我正在尝试下载QListWidget中列出的一些图像。我正在将链接传递到urllib,但它给了我类型错误:必须是字符串或缓冲区,而不是实例此错误。我试图在这里查找,但找不到任何解决方案。这是我的代码。谢谢 def downloadStuff(self): files = self.listWidget.selectedItems() for filename in files: filename = filename.text() file

我正在尝试下载QListWidget中列出的一些图像。我正在将链接传递到urllib,但它给了我类型错误:必须是字符串或缓冲区,而不是实例此错误。我试图在这里查找,但找不到任何解决方案。这是我的代码。谢谢

    def downloadStuff(self):
    files = self.listWidget.selectedItems()
    for filename in files:
        filename = filename.text()
        filename = str(filename)
        print filename
        xfilename = filename.split('/')[-1]
        with open('D:/'+xfilename,'wb') as imageFile:
            print filename
            imageFile.write(urllib.urlopen(filename)).read()
        imageFile.close()

如果看不到堆栈跟踪,很难确定,但我怀疑这一行:

imageFile.write(urllib.urlopen(filename)).read()
应改为:

imageFile.write(urllib.urlopen(filename).read())

顺便说一句,您不需要
imageFile.close()
行,因为
with
语句会自动为您关闭文件。

请修改格式。缩进已关闭,因此此代码实际上无法运行<代码>图像文件不需要关闭。将
一起使用的全部意义在于,您不必管理这些类型的资源。包括整个堆栈跟踪。是的,兄弟,你是对的。非常感谢它现在可以工作了:)哦,好的。。我会删除它:)嘿,兄弟,你能告诉我在下载之前有没有办法知道文件的大小吗?原则上这是可能的,因为数据应该在文件头中,但对不起,我不知道如何准确地获取它。也许你可以单独问这个问题。酷。。无论如何,再次感谢兄弟。