2013-04-28 66 views
3

我是新來的Python和努力理解下面的代碼塊以下錯誤:新的Python,ELIF代碼塊

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 

任何人都可以點我做錯了什麼?我在程序中遵循了正確的縮進。

回答

5

您的代碼中似乎有一個裸體try,這非常麻煩您的程序的佈局。

你,你可以在if聲明的代碼塊中肯定try,但是需要提供整個事情,是這樣的:

if somethingOrOther(): 
    try: 
     xyzzy = 42 
    except: 
     pass 
elif ... 
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) 
+4

如果前面沒有'if'塊,就不能有'elif'塊。 – Volatility 2013-04-28 07:54:06

+0

@volatility是的,也許我應該已經更具體一些 – 2013-04-28 07:55:04

+2

我想如果這是顯而易見的@user,這個問題不會被要求 – 2013-04-28 08:23:20

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或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:  
...... 

還有一點要提出的是不使用等於運算符對無比較。您應該使用是針對單身無比較時:

if o is None or t is None: 
+0

謝謝你的有用的意見!當我把try放在if塊之外時,它就起作用了。 – user24318 2013-04-28 17:33:53

0

你的代碼是正確只是的格式是錯誤的。

沒什麼嚴重,但格式是蟒蛇高效,空格的錯誤數量和它可能毀掉你的整個代碼。帶分號的組織和標點符號也是關鍵。

這是正確的格式。

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) 

好問題!這將在整個堆棧溢出周圍使用。保持!