调用smembers方法报错如下: redis.exceptions.ResponseError: WRONGTYPE Operation against a key holding the wrong kind of value
时间: 2023-07-17 20:59:19 浏览: 263
这个错误通常是因为你尝试对一个非集合类型的键执行 `SMEMBERS` 操作,导致键的值类型不匹配。`SMEMBERS` 命令用于获取集合中的所有成员。
请确保在调用 `SMEMBERS` 命令之前,检查键的数据类型是否为集合类型。你可以使用 `TYPE` 命令来获取键的数据类型,然后再决定是否执行 `SMEMBERS` 操作。
以下是一个示例代码:
```python
import redis
# 连接到 Redis
r = redis.Redis(host='localhost', port=6379, db=0)
# 检查键的数据类型
key = 'your_key'
data_type = r.type(key)
# 如果数据类型为集合类型,执行 SMEMBERS 操作
if data_type == b'set':
members = r.smembers(key)
for member in members:
print(member)
else:
print(f"Error: Wrong data type. Expected set, but got {data_type.decode()}.")
```
在上述代码中,你需要将 `'localhost'` 替换为你的 Redis 数据库的实际 IP 地址,将 `'your_key'` 替换为你要执行 `SMEMBERS` 操作的数据的键名。
代码首先使用 `TYPE` 命令获取键的数据类型,并将返回的字节字符串结果保存在 `data_type` 变量中。然后,根据数据类型决定是否执行 `SMEMBERS` 操作。如果数据类型为集合类型,就执行 `SMEMBERS` 命令并打印集合中的成员;如果数据类型不是集合类型,则打印错误提示。
通过这种方式,你可以避免对非集合类型的键执行 `SMEMBERS` 操作而导致的错误。
阅读全文