或者在if语句中 - 两者的一个条件得到满足

时间:2016-05-16 08:55:28

标签: python boolean-logic

这是我的代码:

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

# path == "/api/"

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

为什么我的print没有显示?

1 个答案:

答案 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)):