【问题标题】:Python try/pass during value assignment?Python 在赋值期间尝试/传递?
【发布时间】:2015-08-05 15:14:13
【问题描述】:

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

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

问题: 是否有 python 语法允许在分配值时在同一行上进行 try/except ?类似:

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

谢谢!

【问题讨论】:

  • 回答:不,没有。但是你可以例如jsonFormatIndications.get(elem)...(如果密钥 elem 丢失,将提供 None)。
  • 把它包装在一个函数中。
  • @jonrsharpe 谢谢老兄!这实际上为我完成了工作。我不知道那种语法..

标签: python django view try-catch


【解决方案1】:

不,你不能在一行中做到这一点。

您可以改用.get() 和一个函数,在一行中优雅地处理所有情况。

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

我们可以定义一个名为get_nested_key_value() 的泛型函​​数,它将接受三个参数my_dictouter_keyinner_key 来获取所需的值。

my_dict : 正在执行查找的字典
outer_key : elem 在这种情况下
inner_key : 在 elem 字典中查找的键 (times_a_day 在这种情况下案例)

我们首先检查字典中是否存在elem,如果存在则使用.get() 检查times_a_day 是否存在。如果存在,我们将返回该值。否则返回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

然后你可以调用这个函数,如果找到 key 则返回值 None

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

【讨论】:

  • 谢谢。现在我在每一行都做 .get(双 .get 在双键上),但我喜欢这个想法
猜你喜欢
  • 2020-12-04
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 2017-07-08
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多