这是我的代码:
if mode not "w" or mode not "r+":
# do stuff
这会导致以下错误:
SyntaxError: invalid syntax
有谁知道我做错了什么?
答案 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