Python在值赋值期间尝试/传递?

时间:2015-08-05 15:14:14

标签: python django view try-catch

情况: 当给定的HashKey通过URL发送到视图时,Django视图从服务器(亚马逊的DynamoDB表)中获取数据项。

问题: 因为它是非关系型数据库,所以DynamoDB表中的某些项目缺少其他项目可能具有的键 - >针对某些获取尝试引发了KeyError,这意味着如果我在视图中分配字典,则会因为KeyError而停止整个过程。这意味着我必须为每次获取尝试(字典值赋值)尝试/除了KeyError

问题: 是否有python语法允许在分配值时在同一行上尝试/除外?类似的东西:

'times_a_day': try jsonFormatIndications[elem]['times_a_day']) except: pass

先谢谢!

1 个答案:

答案 0 :(得分:0)

不,你不能在一行中这样做。

您可以使用.get()和函数来优雅地处理所有案例。

  

get(key[, default])
  如果key在字典中,则返回key的值,否则返回default。如果未给出default,则默认为None,因此此方法永远不会引发KeyError

我们可以定义一个名为get_nested_key_value()的通用函数,该函数将使用3个参数my_dictouter_keyinner_key来获取所需的值。

my_dict:正在执行查找的字典
outer_keyelem在这种情况下为 inner_key:在elem字典中查找的密钥(在这种情况下为times_a_day

我们首先检查字典中是否存在elem,如果它存在,则使用times_a_day检查.get()是否存在。如果它存在,我们将返回该值。否则,将返回None

def get_nested_key_value(my_dict, outer_key, inner_key):
    if my_dict.get(outer_key) and my_dict[outer_key].get(inner_key): # check if both keys present
        return my_dict[outer_key][inner_key] # return the required value
    return None # return None if key not found

然后,您可以调用函数,该函数将返回值,如果找到键,则为None

'times_a_day' : get_nested_key_value(jsonFormatIndications, elem, 'times_a_day')