2016-05-16 81 views
-1

這是我的代碼:或if語句 - 一個兩個條件滿足

s = "/test" 
a = "/api/" 

# path == "/api/" 

if not request.path.startswith(s) or not request.path.startswith(a): 
    print "is's ok!" 

爲什麼我print不顯示?

+2

你的'print'應該總是**顯示這個邏輯,因爲你的測試不能產生'False'。 –

回答

3

您的print聲明實際上是總是顯示。這是因爲兩次測試中至少有一次將始終爲爲真。如果路徑以一個字符串開始,它不能與其他啓動,因此,如果這兩個條件之一是假的,另一種是肯定會是真的:

>>> def tests(path): 
...  print not bool(path.startswith('/test')) 
...  print not bool(path.startswith('/api/')) 
... 
>>> tests('/api/') 
True 
False 
>>> tests('/test') 
False 
True 
>>> tests('') # or any other string not starting with /test or /api/ 
True 
True 

你可能想使用and相反,所以測試必須是真實的:

if not request.path.startswith(s) and not request.path.startswith(a): 

或使用括號和一個not,即只執行print如果路徑不以任一選項啓動:

if not (request.path.startswith(s) or request.path.startswith(a)): 
+0

這並不意味着'print'會一直顯示在OP的代碼中嗎? – interjay

+0

@interjay:它確實會一直顯示。 OP沒有正確測試他們的代碼。 –

+0

@霍洛威:ick,忘了編輯那部分,謝謝你的提醒! –