正在获取“ SyntaxError:无效的语法”,但不知道为什么

时间:2019-05-01 17:48:12

标签: python python-2.7 pygame

获取“ SyntaxError:无效的语法”,但不知道为什么

  File "cursor4.py", line 138
    global D=-1*((self.meteor_x_coordlist[i]-self.meteor_x_coordlist[i+1])+(self.meteor_y_coordlist[i]-self.meteor_y_coordlist[i+1]))
            ^
SyntaxError: invalid syntax

代码如下:

for i in range(8):
    if ((self.meteor_x_coordlist[i]-self.meteor_x_coordlist[i+1])+(self.meteor_y_coordlist[i]-self.meteor_y_coordlist[i+1])) < 0:
        global D=-1*((self.meteor_x_coordlist[i]-self.meteor_x_coordlist[i+1])+(self.meteor_y_coordlist[i]-self.meteor_y_coordlist[i+1]))
    if D**0.5<(self.sizelist[i]/2)+(self.sizelist[i+1]/2):
        #print "-----------------------"
        self.meteorlist.remove(self.meteorlist[i])
        if self.meteorlist == []:
            pass   #psu

2 个答案:

答案 0 :(得分:1)

认为,是因为您在这里使用global很奇怪。看着this tutorial,也许是这样的:

global D
for i in range(8):
    test = ((self.meteor_x_coordlist[i]-self.meteor_x_coordlist[i+1])+(self.meteor_y_coordlist[i]-self.meteor_y_coordlist[i+1]))
    if test < 0:
        D=-1*test
    if D**0.5<(self.sizelist[i]/2)+(self.sizelist[i+1]/2):
        #print "-----------------------"
        self.meteorlist.remove(self.meteorlist[i])
        if self.meteorlist == []:
            pass   #psu 

答案 1 :(得分:0)

您不能将global语句与赋值结合使用。如果两者都需要,请将它们放在单独的行上:

global D
D = whatever

但是首先使用全局变量通常不是一个好主意。通常,您可以通过在面向对象的代码中使用局部变量或实例变量来获得。使用实例变量比使用全局变量要好得多,因为您可以同时使用多个对象,而不必使用相同的变量名将它们全部绊倒。

如果您刚刚添加了global行以解决D的问题,则可能是因为您只是有条件地分配了它,而下一个if测试期望它总是有一个价值。在这种情况下,您可能想保留D一个局部变量,只需在开始循环之前对其进行初始化:

D = initial_value

for i in range(8):
    if something:
        D = new_value

    if some_condition(D): # this line requires D to always have a value!
        ... # do stuff