Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我该如何处理;空";通过Thrift返回Python字典时的值?_Python_Server_Thrift - Fatal编程技术网

我该如何处理;空";通过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,

我正在使用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
值。
我怎样才能节俭地处理这件事

这是我的旧文件中的代码:

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
被分配为
“无开发”