2017-10-19 43 views
1

这工作:Python语法错误不是()操作

>>> not(True) 
False 
>>> a = {} 
>>> a["hidden"] = False 
>>> a["hidden"] = not(a["hidden"]) 
>>> a["hidden"] 
True 

但不是这样的:

def toggleHelp(self, event): 
    # https://stackoverflow.com/questions/10267465/showing-and-hiding-widgets#10268076 
    if (self.special_frame["hidden"] == False): 
     self.special_frame.grid_remove() 
    else: 
     self.special_frame.grid() 
    self.special_frame["hidden"] == not(self.special_frame["hidden"]) 

错误

line 563 
    self.special_frame["hidden"] == not(self.special_frame["hidden"]) 
            ^
SyntaxError: invalid syntax 

在init:

self.special_frame["hidden"] = False 

我做错了什么?

+2

'not'被用作一个操作符,而不是作为一个功能。坏:“不(真)”;好:不是真的。 –

+1

问题是''==操作符。将其更改为'=',语法错误将消失。此外,您通常不希望使用'不(X)',只是用'不x'除非你真的需要括号出于某种原因。 –

回答

3

的问题是,你需要=使用==。这通常不会导致一个语法错误,但在你的情况,你有:

a == not(b) 

这是一样的:

a == not b 

这组为:

(a == not) b 

和导致语法错误。

赋值运算符,而另一方面,具有较低的优先级,所以:

a = not b 

基团:

a = (not b) 

这是好的。

+0

是......如果真的需要的话,可以使用'a ==(not(b))'...但是...无论如何 - 链接到[运算符优先级]可能很有用(https://docs.python .org/3/reference/expressions.html#operator-precedence)... –

+0

@JonClements完全一样。 –

0

我敢肯定,你只需要一个等号,也许这就是错误。 =为assignement和==用于比较。