python 交互redis 的ZADD方法异常: AttributeError: ‘int‘ object has no attribute ‘items‘
2019.8.15更新
代理池异常的原因,是因为在db.py中zadd方法没有修改完全。
def max(self, proxy):"""将代理设置为MAX_SCORE:param proxy: 代理:return: 设置结果"""print('代理', proxy, '可用,设置为', MAX_SCORE)return self.db.zadd(REDIS_KEY, {proxy: MAX_SCORE})
当代理测试可用时,会调用max()函数将代理分数值设置为100,并存入redis中。此时也会调用zadd方法。上次没有修改这里的zadd方法
( ̄□ ̄||)
运行代码,报出异常如下:
异常函数为decrease()函数中的self.db.zincrby()方法。
zincrby()函数的源码如下:
zincrby()函数中有三个参数name,amount,value, name是redis的KEY_VALUE键值。amount是数量,分数,value则是值。
代理池中代码的zincrby()函数的参数是REDIS_KEY, proxy, -1, 。。。感觉顺序不太对啊。 -1是分数值减一,应该是amount在源码中在第二位。
调整一下参数的顺序。
代码运行成功。代理池正常运行了。
感谢 @我笑点滴 的测试和意见。
---------------------------------------------------------------------------手动分割线
以下是原文:
背景:
公司需要做一个通用的爬虫的模块,获取各个网站的有效信息,反反爬措施呢就用到了随机代理,鉴于测试的时效和方便。借用了崔大大的代理池。
这里不得不赞美一下大大,代理池贼好用,功能完整,代理质量也不错,前面一直用的都是好好的,这两天想测一下58房屋的信息质量,没成想就报了个幺蛾子。
具体异常如下所示:
嗯哼?什么鬼啊,整数类型的对象没有items属性,来来来,走过路过不要错过,让我们去看一下到底是哪里出了幺蛾子。
Redis的ZADD方法源码如下:
def zadd(self, name, mapping, nx=False, xx=False, ch=False, incr=False):pieces = []options = {}if nx:pieces.append(Token.get_token('NX'))if xx:pieces.append(Token.get_token('XX'))if ch:pieces.append(Token.get_token('CH'))if incr:pieces.append(Token.get_token('INCR'))options['as_score'] = Truefor pair in iteritems(mapping):pieces.append(pair[1])pieces.append(pair[0])return self.execute_command('ZADD', name, *pieces, **options)
通过源码分析,zadd方法必须传入的参数有两个:name 数据库的键名key,mapping包含value值和score分数值的组合。
iteritems(mapping) 方法获取到的是一个可以迭代对象,通过items()方法可以判断出传入的mapping参数是一个字典。
那么,问题来了,代理池中zadd传入的是三个参数: REDIS_KEY, score, proxy,
python redis中zadd需要传入的是:name,mapipng, 代理池中传入的score是分数值,整数类型,经过iteritems(mapping)方法处理时,整数类型没有items()方法。正好就是代码中所报的异常。
“实验是检验真理的唯一标准” 。推理完了,让我们来实验一下吧。
奈斯,结果与推理完全正确!!
解决的方案怎么简单怎么来咯>
看看数据库是否插入数据了,
很好,完美了!!!
后记:
修改了这个异常,代理池还是无法使用,有趣的是,如果不修复这个异常,代码虽然会抛出异常,但是代理池却能正常使用。
原谅我才疏学浅,无法深究到原理。后面如果找到了解决方案,再来跟大家分享。
python 交互redis 的ZADD方法异常: AttributeError: ‘int‘ object has no attribute ‘items‘相关推荐
- python中使用ZADD方法报错AttributeError: 'int' object has no attribute 'items'
redis的版本关系 正确的完整实例如下: import pymongo import redis# 代码作用是mongodb的数据传送到redis中去 handler = pymongo.Mongo ...
- 成功解决AttributeError: ‘int‘ object has no attribute ‘encode‘
成功解决AttributeError: 'int' object has no attribute 'encode' 目录 解决问题 解决思路 解决方法 解决问题 AttributeError: 'i ...
- 成功解决AttributeError: 'map' object has no attribute 'items'
成功解决AttributeError: 'map' object has no attribute 'items' 目录 解决问题 解决思路 解决方法 解决问题 AttributeError: 'ma ...
- Python3网络爬虫开发实战(崔庆才)笔记——ProxyPool的代码问题:AttributeError: 'int' object has no attribute 'item及相关问题的处理
博主在阅读崔庆才著的<Python3网络爬虫实战>时,深深被其爬虫的高超技术所吸引.当阅读到代理池部分的时候,在代码实践时遇到的一些问题: AttributeError: 'int' ob ...
- celery AttributeError: 'str' object has no attribute 'items'
AttributeError: 'str' object has no attribute 'items' python manage.py celery worker --loglevel=info ...
- sklearn使用FeatureHasher处理字符串特征: AttributeError: ‘str‘ object has no attribute ‘items‘
sklearn使用FeatureHasher处理字符串特征: AttributeError: 'str' object has no attribute 'items' 目录 sklearn使用Fea ...
- python2 中使用pip2 install package_name的时候报错:AttributeError: ‘int‘ object has no attribute ‘endswith‘
1 错误说明 1.在python2的环境下使用pip2 install安装库包的时候报错:AttributeError: 'int' object has no attribute 'endswith ...
- 已解决AttributeError set object has no attribute items(亲测)
AttributeError: 'set' object has no attribute 'items' 出现这个问题,原因可能是定义的header有问题 正确如下: header={"k ...
- AttributeError: ‘set‘ object has no attribute ‘items‘
AttributeError: 'set' object has no attribute 'items' 出现这个问题,原因可能是定义的header有问题 正确如下: header={"k ...
最新文章
- 如何在一分钟内搞定面试官?
- 在Outlook中修改脱机文件(.ost)的保存位置
- 你真的了解静态变量、常量的存储位置吗?
- 【转】matlab练习程序(奇异值分解压缩图像)
- asp.net源码收集
- kubernetes+docker
- IT培训机构那些不得不说的事儿
- Applying Rhetorical Structure Theory to Student Essays for Providing Automated Writing Feedback
- 【全网最新最全28套】Java毕业设计项目合集_轻松完成毕设_Java实战项目/Java练手项目
- 谷歌Chrome浏览器离线安装包
- 【宋红康 MySQL数据库 】【高级篇】【09】InnoDB的数据存储结构
- 数据治理-HDFS废弃文件、Hive废弃表检测与清理
- Pygame实战:这种“欢乐打地鼠”小游戏让几亿人“上瘾“
- 文件复制到u盘后文件夹是空的,怎么恢复?
- 自定义通知图标音量电池没有的解决方法
- 笔记本电脑外接显示器投屏问题
- 快手亮相第七届全球数字营销峰会,以全域内容营销驱动商业新增长
- QTableView和QTableWidget的区别是什么?
- 运放--单电源半波精密整流
- 如今只见当年月,何曾再见当年人?