我该如何处理;空";通过Thrift返回Python字典时的值?
我正在使用Thrift实现用python编写的微服务。我该如何处理;空";通过Thrift返回Python字典时的值?,python,server,thrift,Python,Server,Thrift,我正在使用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,
我返回一个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
值。我怎样才能节俭地处理这件事 这是我的旧文件中的代码:
service Calculator extends shared.SharedService {
map<string,string> response(1:string id, 2:string token),
}
服务计算器扩展shared.SharedService{
映射响应(1:字符串id,2:字符串标记),
}
当
dev\u id
键具有NULL
值时,Thrift不会返回字典,并且Thrift客户端会抛出一个错误。一个解决方案是使用一个从来都不是有效dev\u 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\u id
赋值中使用三元条件运算符
dev_id = user.dev_id if user.dev_id != None else 'not_found'
现在,您可以在字典中检查'not_found'值并进行适当处理
逻辑运算符或
另一种选择是在汤姆·巴伦回答的作业中使用或
dev_id = user.dev_id or 'no_dev'
注意:使用或并不能消除用户.dev_id
在数字情况下可能有一个错误值,如0
,在字符串情况下可能有空字符串。这样的错误值将触发或,并将'no\u dev'
分配给dev\u id
。如果需要保留这些伪值,则使用三元条件运算符。没问题,这是一个很好的答案,我所做的只是让代码更容易理解;)如果user.dev\u id
为0怎么办?或
仍将启动,并且开发id
被分配为“无开发”
。