或者在 if 语句中 - 满足两个条件中的一个
or in if statement - one condition of the two met
这是我的代码:
s = "/test"
a = "/api/"
# path == "/api/"
if not request.path.startswith(s) or not request.path.startswith(a):
print "is's ok!"
为什么我的print
没有显示?
您的 print
语句实际上 总是 显示。那是因为两个测试中至少有一个 always 为真。如果路径以一个字符串开头,则不能以另一个字符串开头,因此如果两个条件之一为假,另一个肯定会为真:
>>> 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)):
这是我的代码:
s = "/test"
a = "/api/"
# path == "/api/"
if not request.path.startswith(s) or not request.path.startswith(a):
print "is's ok!"
为什么我的print
没有显示?
您的 print
语句实际上 总是 显示。那是因为两个测试中至少有一个 always 为真。如果路径以一个字符串开头,则不能以另一个字符串开头,因此如果两个条件之一为假,另一个肯定会为真:
>>> 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)):