elif代码块出错

时间:2013-04-28 07:50:34

标签: 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
 return (c1, i1, c2, i2)

错误:

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

任何人都可以指出我做错了什么吗?我在程序中遵循了正确的缩进。

4 个答案:

答案 0 :(得分:5)

您的代码中似乎有一个裸try,这非常会影响您程序的布局。

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

if somethingOrOther():
    try:
        xyzzy = 42
    except:
        pass
elif ...

答案 1 :(得分: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)

答案 2 :(得分: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。

的缩进方式

您无法将尝试拼接到if语句的中间。所有elif语句必须处于相同的嵌套/缩进级别。因此,如果你在if或elif中打开一个try块,你必须在完成if 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进行比较。你应该使用is来比较单身人士无:

if o is None or t is None:

答案 3 :(得分: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)
  

好问题!这将在整个堆栈溢出周围使用。坚持下去!