2012-08-09 172 views

回答

5

可以“合并条件表达式”所概述由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 
6

而是使用点符号,你可以对getattr一个电话,它可以返回默认值,如果指定的属性不存在:

if getattr(house, 'garage', "") == '3 car': 
    # proceed 

如果house没有名为'garage'的属性,getattr只需要评估一些不等于'3 car'的东西。

+2

人们没有区分“属性不存在”和“属性有错误的价值”,这是非常重要的,因为如果'house.garage'实际上并不存在,其他两个答案会引发异常反对仅仅是None。 – Jake 2012-08-10 15:07:16

+0

这是一个很好的答案,但另一种情况对我来说更常见。我通常在django模型中检查外键。所以这个属性总是存在的(是可点的),但有时它是无的,并且如果我尝试访问相关的模型属性之一就会出错。 – freb 2012-08-10 21:49:37