AttributeError: ‘list‘ object has no attribute ‘keys‘

def hash_redis():
    redis_info = {
        "host": "127.9.9.1",
        "port": 6379,
        "db": 10
    }
    msg_dict = get_news()
    # 连接redis,可以在连接时直接添加 decode_responses=True,这样在输入结果的时候直接是 str 类型,而不是 byte 类型
    r = redis.Redis(**redis_info, decode_responses=True)
    for i in list(msg_dict.keys()):
        if not r.hexists("msg1", i):
            r.hset("msg1", i, msg_dict[i])
            logger.info(f"新闻:{i}-- 写入redis成功!")
        msg_dict.pop(i)
        logger.info(f"新闻: {i}-- 已经推送过了!")
    return msg_dict

解决办法: 将 for i in list(msg_dict.keys()) 改成 for i in msg_dict.keys

def hash_redis():
    redis_info = {
        "host": "127.0.0.1",
        "port": 6379,
        "db": 10
    }
    msg_dict = get_news()
    # 连接redis,可以在连接时直接添加 decode_responses=True,这样在输入结果的时候直接是 str 类型,而不是 byte 类型
    r = redis.Redis(**redis_info, decode_responses=True)
    for i in msg_dict:
        if not r.hexists("msg1", i):
            r.hset("msg1", i, msg_dict[i])
            logger.info(f"新闻:{i}-- 写入redis成功!")
        msg_dict.pop(i)
        logger.info(f"新闻: {i}-- 已经推送过了!")
    return msg_dict

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个错误信息的意思是“属性错误:‘list’对象没有‘keys’属性”。 在Python中,字典(dict)对象有一个名为“keys”的方法,它返回字典的所有键。但是,当你尝试在一个列表(list)对象上调用“keys”方法时,Python会抛出这个“AttributeError”错误,因为列表对象没有“keys”这个属性。 要解决这个错误,你需要检查你的代码,找出哪个变量被错误地当作了一个字典来使用,实际上它是一个列表。你可以尝试将它改为字典对象,或者使用列表对象适当的方法来替代“keys”。 ### 回答2: 这一错误提示通常出现在Python编程语言中,它告诉我们在调用一个list变量的key属性时出现了错误。在Python中,list是一种有序的序列,其中的每个元素都有一个对应的索引值,而key属性则是属于字典(dict)的一个属性,用于获取字典中指定键对应的值。 当我们在一个list变量上调用key属性时,系统会认为我们希望访问该列表的键,而实际上由于列表并没有键这个概念,所以就会出现AttributeError: 'list' object has no attribute 'keys'的错误。这个错误提示表示我们试图在一个list对象上调用它没有的键属性,因此无法执行该操作。 通常出现这个错误的原因是我们在使用代码时混淆了列表和字典这两种数据类型,或者是误解了某些函数或对象的实际用途。如果我们想要使用列表中的元素做键值对的操作,需要先将列表转换为字典才能使用key属性。 解决这个错误的一个方法就是使用字典对象代替列表,或者使用列表中元素的索引值访问相应的元素而不是直接调用key属性。此外,在编写代码时需要注意不同数据类型之间的差别,避免出现类似的错误。 ### 回答3: 这个错误意味着程序试图在一个列表对象上调用一个不存在的方法。具体来说,它试图在一个列表上调用“keys()”方法,但是这个方法只能在字典对象上调用。 出现这个错误的原因可能是在一个期望得到字典的地方,却传入了一个列表。例如,如果在代码中有这样一行: my_list = [1, 2, 3] my_dict = my_list.keys() 那么就会出现这个错误,因为my_list是一个列表,而不是一个字典,它没有“keys()”这个方法。 要解决这个问题,需要检查代码中使用到的所有列表和字典对象,确保调用的方法是正确的。通常情况下,Python会在出现错误的行打印出错误提示和行号,方便我们快速定位问题所在。 另外,如果需要将列表转换为字典,可以使用dict()函数。例如,如果我们需要将下面的列表转换为字典: my_list = [("a", 1), ("b", 2), ("c", 3)] 可以使用以下代码: my_dict = dict(my_list) 这将返回一个包含三个键值对的字典对象。需要注意的是,列表中的元素必须是形如(key, value)的元组形式,否则将会出现类型错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值