这是我的代码:
s = "/test"
a = "/api/"
# path == "/api/"
if not request.path.startswith(s) or not request.path.startswith(a):
print "is's ok!"
为什么我的print
没有显示?
答案 0 :(得分: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
,因此两个测试必须为true:
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)):