gpt4 book ai didi

python - 在 Python 中解开 "None"对象

转载 作者:IT王子 更新时间:2023-10-29 06:05:31 27 4
gpt4 key购买 nike

我正在使用 redis 来尝试保存请求的 session 对象。基于how to store a complex object in redis (using redis-py) ,我有:

def get_object_redis(key,r):
saved = r.get(key)
obj = pickle.loads(saved)
return obj

redis = Redis()
s = get_object_redis('saved',redis)

在某些情况下,没有已保存的 session 并且“已保存”的计算结果为 None。在这种情况下,我得到:

TypeError: must be string or buffer, not None

处理这个问题的最佳方法是什么?

最佳答案

有几种方法可以处理它。这是他们的共同点:

def get_object_redis(key,r):
saved = r.get(key)
if saved is None:
# maybe add code here
return ... # return something you expect
obj = pickle.loads(saved)
return obj

如果找不到 key ,您需要明确您的期望。

版本 1
一个例子是你只返回无:

def get_object_redis(key,r):
saved = r.get(key)
if saved is None:
return None
obj = pickle.loads(saved)
return obj

redis = Redis()
s = get_object_redis('saved',redis)

s 然后是 None。这可能很糟糕,因为您需要在某个地方处理它,而您不知道它是未找到还是已找到并且确实是 None

版本 2
您创建一个对象(可能基于 key ),您可以构造该对象,因为您知道 key 背后的内容。

class KeyWasNotFound(object):
# just an example class
# maybe you have something useful in mind
def __init__(self, key):
self.key = key

def get_object_redis(key,r):
saved = r.get(key)
if saved is None:
return KeyWasNotFound(key)
obj = pickle.loads(saved)
return obj

通常,如果身份很重要,您会在创建对象后存储它,以便为键返回相同的对象。

版本 3
TypeError 是一个非常普遍的错误。您可以创建自己的错误类。这对我来说是首选方式,因为我不喜欢版本 1,也不知道返回哪个对象会有用。

class NoRedisObjectFoundForKey(KeyError):
pass

def get_object_redis(key,r):
saved = r.get(key)
if saved is None:
raise NoRedisObjectFoundForKey(key)
obj = pickle.loads(saved)
return obj

关于python - 在 Python 中解开 "None"对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31249407/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com