今天踩了一个 redis-py 的坑,分享一下

2019-06-19 16:59:36 +08:00
 Livid

Redis 的 Python 客户端的 zincrby 的参数顺序在 redis-py 3 里改了。

在 redis-py 2 里是:

def zincrby(self, name, value, amount=1):

在 redis-py 3 里是:

def zincrby(self, name, amount, value):

具体的改动是这个 commit:

https://github.com/andymccurdy/redis-py/commit/a750c7946d41862a38955c35b6928f098911c406

本来觉得这种基础库上不太可能发生这种事情,直到今天在用 Docker 搭一个新开发环境的时候……

如果要同时兼容两种情况的话,可以这样做:

import redis

print(redis.VERSION)

redis.VERSION 里的第一个元素就是大版本号。

19040 次点击
所在节点    Redis
37 条回复
enzo113
2019-06-19 17:06:40 +08:00
这改动确实反人类。
我想到了一个别的解决方法:可以显式的把参数写出来,如 amount=1, value="2", 调用的时候就能无视顺序了。
Abbeyok
2019-06-19 17:07:23 +08:00
这个是个坑,之前遇到过
chengxiao
2019-06-19 17:07:37 +08:00
今天我也发现一个 pymongo 的坑
Mongodb 从 3.6 版本开始就支持字典 key 包含. $等特殊符号了
但是在 pymongo 里还是会做拼写检查,需要到 site-package 里把 collection 把 check_key=True 改 False 即可
opengps
2019-06-19 17:45:29 +08:00
这种改动还不如加个新方法
jamfer
2019-06-19 17:47:23 +08:00
这.... 还带这么玩儿的???
Valid
2019-06-19 17:49:10 +08:00
最骚的是 amount
scriptB0y
2019-06-19 17:59:47 +08:00
可以理解吧,可能一开始作者是想设置一个 default 的 increment=1,然后就将带默认值的参数放到最后面了。

后来有人提出这跟 redis 原生的命令相反了 github.com/andymccurdy/redis-py/issues/571

然后作者就改回去了。
cominghome
2019-06-19 18:37:20 +08:00
一直是显示传参,但是这个改动确实坑
xiaolanger
2019-06-19 19:26:59 +08:00
上次用这个的时候,也是仔细看了看文档
iPhoneXI
2019-06-19 19:43:19 +08:00
redis py setex 顺序也是坑,还是指定关键字完事
wsbnd9
2019-06-19 20:20:00 +08:00
python3 StrictRedis zadd 坑


import redis
r = redis.Redis(...)
if redis.VERSION[0] < 3:
r.zadd('my-key', element1=score1)
else:
r.zadd('my-key', {element1: score1})



这个也是坑
Yyyye
2019-06-19 20:38:43 +08:00
为什么不直接添加一个新方法呢!
mengyaoss77
2019-06-19 20:39:50 +08:00
感觉 redis 的有序集合操作语义很奇怪啊 member 在后 score 在前。。
phy25
2019-06-19 21:41:29 +08:00
Ehco1996
2019-06-20 07:31:06 +08:00
还有 exists 的返回值从 None 变为 0 了
Mithrandir
2019-06-20 09:54:45 +08:00
所以要读 changelog
raptor
2019-06-20 10:14:26 +08:00
@iPhoneXI 同被 setex 坑过
Mirage09
2019-06-20 10:16:42 +08:00
....居然还能这么换顺序的
fireindark
2019-06-20 17:14:40 +08:00
pika 的 python2 和 python3 也有这个问题
coolzilj
2019-06-20 17:54:13 +08:00
大版本更新有 backwards incompatible changes 也很正常吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/575539

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX