我正在使用Thrift来编写用python编写的微服务
我在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
函数返回字典,dev_id
键在很多情况下都有NULL
值。
我怎样才能在Thrift中处理这个问题?
这是我的Thrift文件中的代码:
service Calculator extends shared.SharedService {
map<string,string> response(1:string id, 2:string token),
}
当dev_id
键的值为NULL
时,Thrift不会返回字典,并且Thrift客户端会抛出错误。
答案 0 :(得分:2)
一种解决方案是使用永远不是有效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成员,否则您将错误地获取&#39; no_dev&#39;
答案 1 :(得分:2)
有两种方法可以做到这一点:
三元条件运算符
您可以在dev_id
作业中使用三元条件运算符。
dev_id = user.dev_id if user.dev_id != None else 'not_found'
现在你可以检查&#39; not_found&#39;字典中的值并适当地处理它。
or
逻辑运算符
另一种选择是在Tom Barron回答
时使用or
dev_id = user.dev_id or 'no_dev'
注意: or
的使用并不能消除user.dev_id
可能有0
的假值的极端情况。字符串的数字或空字符串。此类虚假值将触发or
并将'no_dev'
分配给dev_id
。如果需要保留这样的假值,那么使用三元条件运算符。