這是我的代碼:或if語句 - 一個兩個條件滿足
s = "/test"
a = "/api/"
# path == "/api/"
if not request.path.startswith(s) or not request.path.startswith(a):
print "is's ok!"
爲什麼我print
不顯示?
這是我的代碼:或if語句 - 一個兩個條件滿足
s = "/test"
a = "/api/"
# path == "/api/"
if not request.path.startswith(s) or not request.path.startswith(a):
print "is's ok!"
爲什麼我print
不顯示?
您的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)):
這並不意味着'print'會一直顯示在OP的代碼中嗎? – interjay
@interjay:它確實會一直顯示。 OP沒有正確測試他們的代碼。 –
@霍洛威:ick,忘了編輯那部分,謝謝你的提醒! –
你的'print'應該總是**顯示這個邏輯,因爲你的測試不能產生'False'。 –