通过 Thrift 返回 Python 字典时如何处理 "Null" 值?
How can I handle "Null" values when returning a Python dictionary through Thrift?
我将 Thrift 用于 python 编写的微服务。
我正在 return 中 python 中的字典,其中可以包含 NULL
个值。
这是我的 Python 响应处理程序的代码:
def response(id, token):
user_record = usertable.objects.get(uid = id)
if user_record.token == token:
response = dict(
pa_uid = user_record.pa_uid,
pa_token = user_record.pa_token,
dev_id = user.dev_id
)
return response
response
函数是 return 字典,在许多情况下 dev_id
键有一个 NULL
值。
我如何在 Thrift 中处理这个问题?
这是我的 Thrift 文件中的代码:
service Calculator extends shared.SharedService {
map<string,string> response(1:string id, 2:string token),
}
当 dev_id
键有一个 NULL
值时,Thrift 没有 return 字典,Thrift 客户端会抛出错误。
一个解决方案是使用一个永远不是有效值的值 dev_id
来表明它不存在:
例如:
def response(id, token):
user_record = usertable.objects.get(uid = id)
if user_record.token == token:
response = dict(
pa_uid = user_record.pa_uid,
pa_token = user_record.pa_token,
dev_id = user.dev_id or 'no_dev'
)
return response
然后你可以观察 Thrift 中的 no_dev
值,并在 dev_id
未定义时做任何适当的事情。
Shankar 在他的回答中提出了一个很好的观点:如果 0 是一个有效的 user.dev_id 值,您将需要使用三元运算符来设置字典的 dev_id 成员,否则您会错误地得到 'no_dev'.
您可以通过两种方式执行此操作:
三元条件运算符
您可以在 dev_id
赋值中使用三元条件运算符。
dev_id = user.dev_id if user.dev_id != None else 'not_found'
现在您可以在字典中检查 'not_found' 值并适当地处理它。
or
逻辑运算符
另一种选择是在作业中使用 or
,正如 Tom Barron 已回答的
dev_id = user.dev_id or 'no_dev'
注意: or
的使用并不能消除 user.dev_id
可能具有像 0
这样的虚假值的极端情况如果是数字或空字符串,如果是字符串。此类虚假值将触发 or
并将 'no_dev'
分配给 dev_id
。如果需要保留此类虚假值,请使用三元条件运算符。
我将 Thrift 用于 python 编写的微服务。
我正在 return 中 python 中的字典,其中可以包含 NULL
个值。
这是我的 Python 响应处理程序的代码:
def response(id, token):
user_record = usertable.objects.get(uid = id)
if user_record.token == token:
response = dict(
pa_uid = user_record.pa_uid,
pa_token = user_record.pa_token,
dev_id = user.dev_id
)
return response
response
函数是 return 字典,在许多情况下 dev_id
键有一个 NULL
值。
我如何在 Thrift 中处理这个问题?
这是我的 Thrift 文件中的代码:
service Calculator extends shared.SharedService {
map<string,string> response(1:string id, 2:string token),
}
当 dev_id
键有一个 NULL
值时,Thrift 没有 return 字典,Thrift 客户端会抛出错误。
一个解决方案是使用一个永远不是有效值的值 dev_id
来表明它不存在:
例如:
def response(id, token):
user_record = usertable.objects.get(uid = id)
if user_record.token == token:
response = dict(
pa_uid = user_record.pa_uid,
pa_token = user_record.pa_token,
dev_id = user.dev_id or 'no_dev'
)
return response
然后你可以观察 Thrift 中的 no_dev
值,并在 dev_id
未定义时做任何适当的事情。
Shankar 在他的回答中提出了一个很好的观点:如果 0 是一个有效的 user.dev_id 值,您将需要使用三元运算符来设置字典的 dev_id 成员,否则您会错误地得到 'no_dev'.
您可以通过两种方式执行此操作:
三元条件运算符
您可以在 dev_id
赋值中使用三元条件运算符。
dev_id = user.dev_id if user.dev_id != None else 'not_found'
现在您可以在字典中检查 'not_found' 值并适当地处理它。
or
逻辑运算符
另一种选择是在作业中使用 or
,正如 Tom Barron 已回答的
dev_id = user.dev_id or 'no_dev'
注意: or
的使用并不能消除 user.dev_id
可能具有像 0
这样的虚假值的极端情况如果是数字或空字符串,如果是字符串。此类虚假值将触发 or
并将 'no_dev'
分配给 dev_id
。如果需要保留此类虚假值,请使用三元条件运算符。