在带有多个布尔运算符的if语句中抛出的SyntaxError

时间:2014-02-01 18:42:47

标签: python python-2.7 if-statement

这是我的代码:

if mode not "w" or mode not "r+":
    # do stuff

这会导致以下错误:

SyntaxError: invalid syntax

有谁知道我做错了什么?

3 个答案:

答案 0 :(得分:5)

not不是比较运算符;它是一元布尔运算符,这意味着它只需要一个参数。

也许你想要!=,而不是等于?

if mode != "w" and mode != "r+":

我还将or替换为and,因为如果模式等于'w',那么 也不等于'r+' 。所有这些负面因素都让你很难理解,你可以使用:

if not (mode == 'w' or mode == 'r+'):

如果从逻辑上说这更容易理解。

您还可以使用元组和负成员资格测试not in将测试合并为一个:

if mode not in ('w', 'r+'):

更容易阅读和理解。

答案 1 :(得分:2)

试试这个:

if not mode == "w" or not mode == "r+":
    ...

这会阻止您看到SyntaxError。但是,由于这些是打开file对象可写的常用值,您还可以尝试写入该文件并捕获IOError。像这样的东西,

f = open('blah', 'r')
try:
    f.write("Something amazing")
except IOError:
    # do something to read-only file

答案 2 :(得分:2)

您无法使用以下语法比较项目:

a not b

您需要使用以下语法对它们进行比较:

a != b

所以重写你的if语句:

if mode != "w" or mode != "r+":
    # do stuff

现在,尽管如此,这纯粹是基于语法的变化。

问题是,这个if语句没有意义,所以即使你做了上面的改变,它也肯定不会做你想做的事。

考虑一下:如果模式是"w"怎么办?然后它不会是"r+",反之亦然。换句话说,每个值都不同于两者,或至少其中一个。

我怀疑您需要and而不是or

if mode != "w" and mode != "r+":
    # do stuff