3

我正在努力理解下面代码块中的以下错误:

if o == None or t == None:
 try:
elif o == 1 and t == 1:
  c1 = c1 + 1
elif o == -1 and t == -1:
  c2 = c2 + 1
elif o == -1 and t == 1:
  i1 = i1 + 1                
elif o == 1 and t == -1:
  i2 = i2 + 1
 return (c1, i1, c2, i2)

错误 :

elif o == 1 and t == 1:
   ^
Syntax error : invalid syntax 

谁能指出我做错了什么?我在程序中遵循了正确的缩进。

4

4 回答 4

5

您的代码中似乎有一个赤裸裸try的东西,这非常塞满了您的程序布局。

您当然可以try在语句的代码块中if,但您需要提供整个内容,例如:

if somethingOrOther():
    try:
        xyzzy = 42
    except:
        pass
elif ...
于 2013-04-28T07:52:34.770 回答
4

这是正确缩进的代码结构,所以现在可能很明显问题出在哪里?

if o == None or t == None:
    try:
        elif o == 1 and t == 1:
            c1 = c1 + 1
        elif o == -1 and t == -1:
            c2 = c2 + 1 elif o == -1 and t == 1:
            i1 = i1 + 1
        elif o == 1 and t == -1:
            i2 = i2 + 1 
return (c1, i1, c2, i2)
于 2013-04-28T07:52:56.573 回答
3

一旦你修复你的缩进

if o == None or t == None:
    try:
        elif o == 1 and t == 1:
             c1 = c1 + 1 
        elif o == -1 and t == -1:    
......

您的代码仍然无法正常工作。注意 elif 与 if 的缩进不同。

您不能将 try 拼接到 if 语句的中间。所有 elif 语句必须处于相同的嵌套/缩进级别。因此,如果您在 if 或 elif 中打开 try 块,则必须在完成 if 或 elif 之前完成它。

你会需要这样的:

try:
    if o is None or t is None:
        pass
    elif o == 1 and t == 1:
        c1 = c1 + 1 
    elif o == -1 and t == -1:    
......

另一点是不要使用相等运算符与 None 进行比较。在与单例 None 进行比较时,您应该使用 is:

if o is None or t is None:
于 2013-04-28T07:59:27.220 回答
0

您的代码是正确的,只是格式错误。

没什么大不了的,但格式化在 python 中非常有效,错误的空格数量可能会毁掉你的整个代码。用分号组织和标点符号也是关键。

这是正确的格式。

if o == None or t == None:
    try:
        elif o == 1 and t == 1:
            c1 = c1 + 1
        elif o == -1 and t == -1:
            c2 = c2 + 1
        elif o == -1 and t == 1:
            i1 = i1 + 1                
        elif o == 1 and t == -1:
            i2 = i2 + 1

    except:
        ...

return (c1, i1, c2, i2)

好问题!这将在堆栈溢出发生的所有时间内使用。保持!

于 2016-04-07T21:10:21.710 回答