什么是python中`get或default`的通用方法?

时间:2017-06-09 07:40:53

标签: python mongodb python-2.7 mongoengine

我想得到一个mongoengine模型对象的属性,但它缺少了(它经常在mongo中):

unit.city给了我AttributeError

unit.get('city')'Unit' object has no attribute 'get'我无法通过dir(unit)找到任何合适的方法。

所以我必须使用标准的python语句:

city = unit.city if 'city' in unit else None

对于get操作来说,这有点复杂,因为我有很多这种转换。

所以我想知道是否有任何通用方法来获取属性值或某个默认值(如果属性不存在) - 例如get类型为dict

city = unit.get('city') # None
# or
city = unit.get('city', 'Moscow') # 'Moscow'

我会定义自己的函数get,但我感兴趣的是标准库中是否存在任何函数。然而,from operation import getitem无法做到这一点。

顺便说一句,我使用的是python 2。

2 个答案:

答案 0 :(得分:3)

一般来说,python有两种常见的模式。混合hasattr + getattr或将整个事物包装在try / except

city = getattr(unit,'city','Moscow')

其他方法是

try:
    city = unit.city
except AttributeError:
    city = None

第二个更像是pythonic。但是,当您处理数据库时。最好使用ORM并一起避免这类事情。

答案 1 :(得分:1)

getattr(object, name[, default])

city = getattr(unit, 'city', 'Moscow')