Python3中decode_responses=False的Redis实例如何正确标注类型?
Redis实例(返回bytes类型)的正确类型标注方式
你遇到的TypeError: Redis is not a generic class错误,是因为当前使用的redis-py版本不支持直接用Redis[bytes]这种泛型标注语法。以下是不同版本的解决方案:
方案1:升级redis-py到4.3.0+
新版本的redis-py已将Redis类实现为泛型,直接使用泛型标注即可:
from redis import Redis client: Redis[bytes] = Redis(decode_responses=False)
方案2:旧版redis-py(低于4.3.0)的替代方案
如果无法升级版本,可以通过以下方式标注:
- 使用
typing.cast强制指定类型:from redis import Redis from typing import cast client = cast(Redis, Redis(decode_responses=False)) - 或者自定义类型别名:
from redis import Redis from typing import TypeAlias BytesRedis: TypeAlias = Redis client: BytesRedis = Redis(decode_responses=False)
注:当decode_responses=False时,Redis客户端的所有返回值默认都是bytes类型,上述标注可以让类型检查工具(如mypy)正确识别返回值类型。
内容的提问来源于stack exchange,提问作者tiyee
相关产品推荐
相关产品推荐

