2016-12-07 52 views
1

Python中是否有某種關鍵字可以使用,它可以在邏輯上與總是錯誤的比較?Python - 將數字與布爾值進行比較(總是返回false)

例如,我想是這樣

None > 20 

要評估時返回false。除了None之外,還有一些關鍵字可以使用,因爲比較NoneType和Integer會引發錯誤?

+0

你能詳細說明你到底想要達到什麼目的嗎? 。 .some context –

+0

@MosesKoledoye我有一些邏輯,如果某些條件得到滿足,它將字典中的鍵的值設置爲「無」。後來,我使用'eval'來評估一些布爾邏輯,然後嘗試比較'None> 20'(或其他數字)。實際上,我通過將eval放入try/except塊並傳遞TypeError來解決此問題,但我不確定這是否是實現此目的的最佳方法。 – johnsmith101

回答

5

我不認爲有一個內置的對象,這樣做,但你總是可以讓你自己:

class Thing: 
    def __lt__(self, other): 
     return False 
    #use the same function for <=, ==, >, etc 
    __le__ = __eq__ = __gt__ = __ge__ = __lt__ 

x = Thing() 
print(x < 20) 
print(x <= 20) 
print(x > 20) 
print(x >= 20) 
print(x == 20) 

結果:

False 
False 
False 
False 
False 

編輯:我記得一個內置的方法來做到這一點。如果你只需要比較普通的數字,你可以使用特殊的「非數字」的浮點值:

x = float("nan") 
print(x < 20) 
print(x <= 20) 
print(x > 20) 
print(x >= 20) 
print(x == 20) 

結果:

False 
False 
False 
False 
False 

如果您特別只想x > 20返回false並不特別關心其他比較返回的內容,因此使用特殊的「負無窮」浮點值可能更有意義。

>>> x = float("-inf") 
>>> x > 20 
False 
+0

當用於不等式操作時,float(「nan」)是否也返回false?我需要它返回false爲'float(「nan」)!= 20' – johnsmith101

+0

讓我們看看......不,'float(「nan」)!= 20'評估爲True。看起來你畢竟需要定義自己的類型。 (不要忘記給'__le__ = __eq__ = ...'鏈添加'__ne__') – Kevin