美文网首页
Redis-py 2.x 升级至3.x 后出现数据类型错误

Redis-py 2.x 升级至3.x 后出现数据类型错误

作者: zbharper | 来源:发表于2019-06-04 12:04 被阅读0次

    python业务代码会向redis存储带有布尔类型的字典,原始版本使用redis-py 2.x,新服务器升级至redis-py 3.2 后,出现报错:

    DataError: Invalid input of type: 'bool'. Convert to a byte, string or number first.
    

    查询redis-py官方文档,发现2.x升级至3.0后有较大更新,其中一条:

    Encoding of User Input
    redis-py 3.0 only accepts user data as bytes, strings or numbers (ints, longs and floats). Attempting to specify a key or a value as any other type will raise a DataError exception.

    redis-py 2.X attempted to coerce any type of input into a string. While occasionally convenient, this caused all sorts of hidden errors when users passed boolean values (which were coerced to ‘True’ or ‘False’), a None value (which was coerced to ‘None’) or other values, such as user defined types.

    All 2.X users should make sure that the keys and values they pass into redis-py are either bytes, strings or numbers.

    用户应确保存入的key,value必须是bytes,string或者number三种类型,如果有布尔类型、None类型或者其他用户自定义类型,必须显式转换为上述三种合法类型再存入redis,否则会报错。

    解决办法:

    1. 服务器环境限制redis-py为2.x版本
    2. 改进业务代码,将字典数据显式转换为字符串,避免以后出现潜在问题(推荐)

    相关文章

      网友评论

          本文标题:Redis-py 2.x 升级至3.x 后出现数据类型错误

          本文链接:https://www.haomeiwen.com/subject/zwslxctx.html