AttributeError: 'tuple' 对象没有属性 'content'

如何解决AttributeError: 'tuple' 对象没有属性 'content'

我正在连接到 API,该 API 返回一个包含多条数据的 JSON 对象,并使用该数据构建一个 html 页面。我在使用 python 下载图像的本地副本并包含链接到图像的图像标签时遇到问题。当我运行代码时,我收到错误说明 AttributeError: 'tuple' object has not attribute 'content'我有以下代码

    import urllib.request
    import json
    out = open('outfile.txt','w')
    link = "https://api.nasa.gov/planetary/apod?api_key="
    print(link)
    resp = urllib.request.urlopen(link)
    data = resp.read()
    print(str(data,'utf-8'))
    returnjson = json.loads(data)
    img_url = returnjson['url']
    title = returnjson['title']
    current_date = returnjson['date']
    print(img_url)
    print(title)
    print(current_date)
    resp = urllib.request.urlretrieve(img_url)
    img_file_name = img_url.split('/')[-1]
    with open(img_file_name,'wb') as f:
    f.write(resp.content)

解决方法

urllib.request.urlretrieve 返回一个没有内容属性的元组。相反,它将内容复制到本地文件。此外,根据文档,此功能是遗留的,将来可能会被弃用。我建议遵循 urllib.request docs 中的建议,即:

建议将 Requests package 用于更高级别的 HTTP 客户端接口。

,

首先,您的 API 密钥在您的问题中 - 您可能希望将其编辑掉,以免其他人使用它!

错误出现在您提供给我们的样本的最后一行

f.write(resp.content)

此时,resp 设置为 urllib.request.urlretrieve(img_url) 的响应。但是,urllib.request.urlretrieve 实际上返回一个 元组 - (filename,headers)filename 是下载的资源在系统上的存储位置,headers 是请求的响应标头。

修改你的代码,我相信这可能是你想要的?

    import os
    
    #rest of your code here
    
    (filename,headers) = urllib.request.urlretrieve(img_url)
    img_file_name = img_url.split('/')[-1]
    os.replace(filename,img_file_name)

编辑:os.rename 似乎不喜欢现有文件,但是 os.replace 喜欢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?