2012-08-09 253 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