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‘相关推荐

  1. python中使用ZADD方法报错AttributeError: 'int' object has no attribute 'items'

    redis的版本关系 正确的完整实例如下: import pymongo import redis# 代码作用是mongodb的数据传送到redis中去 handler = pymongo.Mongo ...

  2. 成功解决AttributeError: ‘int‘ object has no attribute ‘encode‘

    成功解决AttributeError: 'int' object has no attribute 'encode' 目录 解决问题 解决思路 解决方法 解决问题 AttributeError: 'i ...

  3. 成功解决AttributeError: 'map' object has no attribute 'items'

    成功解决AttributeError: 'map' object has no attribute 'items' 目录 解决问题 解决思路 解决方法 解决问题 AttributeError: 'ma ...

  4. Python3网络爬虫开发实战(崔庆才)笔记——ProxyPool的代码问题:AttributeError: 'int' object has no attribute 'item及相关问题的处理

    博主在阅读崔庆才著的<Python3网络爬虫实战>时,深深被其爬虫的高超技术所吸引.当阅读到代理池部分的时候,在代码实践时遇到的一些问题: AttributeError: 'int' ob ...

  5. celery AttributeError: 'str' object has no attribute 'items'

    AttributeError: 'str' object has no attribute 'items' python manage.py celery worker --loglevel=info ...

  6. sklearn使用FeatureHasher处理字符串特征: AttributeError: ‘str‘ object has no attribute ‘items‘

    sklearn使用FeatureHasher处理字符串特征: AttributeError: 'str' object has no attribute 'items' 目录 sklearn使用Fea ...

  7. python2 中使用pip2 install package_name的时候报错:AttributeError: ‘int‘ object has no attribute ‘endswith‘

    1 错误说明 1.在python2的环境下使用pip2 install安装库包的时候报错:AttributeError: 'int' object has no attribute 'endswith ...

  8. 已解决AttributeError set object has no attribute items(亲测)

    AttributeError: 'set' object has no attribute 'items' 出现这个问题,原因可能是定义的header有问题 正确如下: header={"k ...

  9. AttributeError: ‘set‘ object has no attribute ‘items‘

    AttributeError: 'set' object has no attribute 'items' 出现这个问题,原因可能是定义的header有问题 正确如下: header={"k ...

最新文章

  1. 如何在一分钟内搞定面试官?
  2. 在Outlook中修改脱机文件(.ost)的保存位置
  3. 你真的了解静态变量、常量的存储位置吗?
  4. 【转】matlab练习程序(奇异值分解压缩图像)
  5. asp.net源码收集
  6. kubernetes+docker
  7. IT培训机构那些不得不说的事儿
  8. Applying Rhetorical Structure Theory to Student Essays for Providing Automated Writing Feedback
  9. 【全网最新最全28套】Java毕业设计项目合集_轻松完成毕设_Java实战项目/Java练手项目
  10. 谷歌Chrome浏览器离线安装包
  11. 【宋红康 MySQL数据库 】【高级篇】【09】InnoDB的数据存储结构
  12. 数据治理-HDFS废弃文件、Hive废弃表检测与清理
  13. Pygame实战:这种“欢乐打地鼠”小游戏让几亿人“上瘾“
  14. 文件复制到u盘后文件夹是空的,怎么恢复?
  15. 自定义通知图标音量电池没有的解决方法
  16. 笔记本电脑外接显示器投屏问题
  17. 快手亮相第七届全球数字营销峰会,以全域内容营销驱动商业新增长
  18. QTableView和QTableWidget的区别是什么?
  19. 运放--单电源半波精密整流
  20. 如今只见当年月,何曾再见当年人?

热门文章

  1. xiuno4.0 火车头发布模块一Web登陆版
  2. 电脑休眠后无法唤醒的解决办法!
  3. excel两个表格数据对比_用Excel一键抓取网页表格数据
  4. 日本地震波及芯片产业链致价格走势难料
  5. c语言实现循环结构的语句有哪些?它们的区别是什么?,2011年04月份计算机软件基础(一)复习资料二...
  6. 蓝桥杯个人总结(入门练习-VIP题)
  7. iris学习踩坑之旅
  8. 微软输入法自动导入小鹤双拼
  9. 1396:病毒 (拓扑序)
  10. Android底部小白条的解决方法