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

2024-04-19 21:11:04 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的密码:

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

这将导致以下错误:

SyntaxError: invalid syntax

有人知道我做错了什么吗?你知道吗


Tags: or密码ifmode错误notdosyntax
3条回答

试试这个:

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

not不是比较运算符;它是一个一元布尔运算符,这意味着它只接受一个参数。你知道吗

也许你想要的是!=,而不是平等?你知道吗

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

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

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

如果这更容易理解,从逻辑上讲。你知道吗

您还可以使用元组和负成员身份测试将测试组合为一个测试,not in

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

更容易阅读和理解。你知道吗

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

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

相关问题 更多 >