意外的标记'not'仅在同一行中发生

时间:2017-11-28 15:05:30

标签: python visual-studio

所以这是一个关于问题缩进引入歧义的问题,而不是not的问题。

==============原始问题==============

我正在使用Visual Studio。基本上这是我遇到的简化示例:

class sample():
    def __init__(self):
        self.xData = [0]
        self.yData = [0]
    def trySomething(self, x = [], y = []):
        if not x: x = self.xData; if not y: y = self.yData
        #BlaBlaBla

这里我想检查x和y是否有输入,如果没有,则使用类本身的变量。但是,无法运行,if not y:会突出显示Unexpected token 'not'的红色挥动线,如下所示: demo 有线的事情是,一旦我将它分成另一行,事情就会得到解决:

class sample():
    def __init__(self):
        self.xData = [0]
        self.yData = [0]
    def trySomething(self, x = [], y = []):
        if not x: x = self.xData; 
        if not y: y = self.yData
        #BlaBlaBla

那么将它们一起写成一行有什么不对?或者是Visual Studio的某种错误?

2 个答案:

答案 0 :(得分:4)

歧义。你的意思是哪一个?

)3

    if not x: 
        x = self.xData
    if not y: 
        y = self.yData

以下是更多详情:https://docs.python.org/3/reference/compound_stmts.html

TLDR在这种情况下,不要使用 if not x: x = self.xData if not y: y = self.yData

答案 1 :(得分:2)

这是合乎逻辑的。如果您编写词汇范围(如if),甚至<分号后的 ,则仍在if

例如:

>>> if False: print('a'); print('b')
... 
>>> 

(什么都不打印)

所以:

if False: print('a'); print('b')

等同于

if False:
    print('a')
    print('b')  # also under the if

由于引入新的范围使得它非常难以理解,因此Python中不允许使用该语法。它会造成暧昧。

所以你写的陈述不正确:你会在if not y下设置if not x,这不是你的意思。