检查是否存在,是否存在,是否为某个值
问题描述:
我经常需要检查一个类的实例是否有属性,如果该属性存在,请与其值进行比较。除了以下之外,没有办法去做吗?检查是否存在,是否存在,是否为某个值
if house.garage:
if house.garage == '3 car':
# do something with house.garage
答
可以“合并条件表达式”所概述由Martin Fowler在这里:http://sourcemaking.com/refactoring/consolidate-conditional-expression#permalink-15
从本质上讲,任何if语句包含另一个if语句里面实际上只是1,如果与和之间的语句!
if house.garage:
if house.garage == '3 car':
# do something with house.garage
成为
if house.garage and house.garage == '3 car':
# do something with house.garage
答
而是使用点符号,你可以对getattr
一个电话,它可以返回默认值,如果指定的属性不存在:
if getattr(house, 'garage', "") == '3 car':
# proceed
如果house
没有名为'garage'的属性,getattr
只需要评估一些不等于'3 car'的东西。
人们没有区分“属性不存在”和“属性有错误的价值”,这是非常重要的,因为如果'house.garage'实际上并不存在,其他两个答案会引发异常反对仅仅是None。 – Jake 2012-08-10 15:07:16
这是一个很好的答案,但另一种情况对我来说更常见。我通常在django模型中检查外键。所以这个属性总是存在的(是可点的),但有时它是无的,并且如果我尝试访问相关的模型属性之一就会出错。 – freb 2012-08-10 21:49:37