2015-09-16 46 views
0

請在python 2.7中找到下面的代碼塊。Python中if elif else語句的正確組合

for i in range(len(p_routes)): 
    if len(p_routes[i]) > 2 : 
     if p_routes[i][2] == 'No Backup': 
      K = K + 1 
      for z in range(len(p_routes[i])): 
       nbup.write(K + 1 , z , p_routes[i][z]) 

     elif p_routes[i][0][0] == 'E' : 
      L = L + 1 
      for z in range(len(p_routes[i])): 
       ex.write(L, z , (p_routes[i][z]) 

     elif p_routes[i][0][0] == 'G': 
      M = M + 1 
      for z in range(len(p_routes[i])) 
       gh.write(M ,z, p_routes[i][z]) 

    else len(p_routes[i]) < 2: 
     pass 
     print "\nFor some reason. " 

嗯,我得到一個語法錯誤,說elif p_routes[i][0][0] == 'G':。我無法弄清楚爲什麼會出現這個錯誤,因爲我認爲這條線沒有語法錯誤。

exgh是在此代碼塊之前創建的兩個excel表變量。而p_routes是2度列表的列表。格式類似於p_routes = [['prov1' , 'address1' , 'No Backup'] , ['prov2', 'address2', 'Back1', 'Back2' ]]

您可能已經瞭解,內部列表長度是可變大小。任何意見將不勝感激。對不起,這個愚蠢的問題,但我做了很多搜索和重新格式化我的if..else塊的方式。但每次我得到這個錯誤。

順便說一句,以前的語法錯誤是L = L + 1。滑稽!然後我改變了L的類型L = int(L)。現在,那個錯誤消失了。

+6

您也會在else語句中看到一個錯誤,else代表沒有條件,如果所有其他條件都是錯誤的,就是這樣做的。此外,'傳遞'*和*'print'聲明? –

+3

語法錯誤'ex.write(L,z,(p_routes [i] [z])'應該是這個'ex.write(L,z,(p_routes [i] [z]))''很多其他的錯誤 – The6thSense

+0

非常感謝你的快速和點的答案。正如你指出的,是的,這是問題的確。 – Neo

回答

1

注:

千萬不要忘記關閉()

否則將執行if none of the above case condition was right所以你不應該給任何條件else語句

不要在if else for.....

忘記 :

更改爲您的代碼:

for i in range(len(p_routes)): 
    if len(p_routes[i]) > 2 : 
     if p_routes[i][2] == 'No Backup': 
      K = K + 1 
      for z in range(len(p_routes[i])): 
       nbup.write(K + 1 , z , p_routes[i][z]) 

     elif p_routes[i][0][0] == 'E' : 
      L = L + 1 
      for z in range(len(p_routes[i])): 
       ex.write(L, z , (p_routes[i][z])) 

     elif p_routes[i][0][0] == 'G': 
      M = M + 1 
      for z in range(len(p_routes[i])): 
       gh.write(M ,z, p_routes[i][z]) 

    else : 
     pass 
     print "\nFor some reason. " 
1

首先作爲維涅什指出的那樣,你的錯誤實際上是對前行,你忘了關閉括號

二,else子句的如果,ELIF ,否則結構不需要檢查。 這裏是我做了前段時間與選擇在python linked to relevant time

如何運作的視頻(可能不相關) 記住,還不斷與當前的邏輯,如果發生了什麼:len(p_routes[i])是2?您目前只檢查它是否小於2或大於2.

+1

謝謝隊友指出可能的錯誤。但它被故意保留,因爲這裏提到的變量會是一些ssh命令的輸出,正如我做正則表達式過濾的方式一樣,可能的結果只能是<2 or > 2. – Neo

0

出現語法錯誤時,查看上一行以確保其正確性總是明智的。當你錯過了關閉),Python一直在尋找下一行。

有很多方面可以使代碼更清潔一些。例如,當您只能遍歷列表本身時,不需要繼續使用range(len(x))

希望你找到以下思路有所幫助:

for route in p_routes: 
    length = len(route) 

    if length > 2 : 
     if route[2] == 'No Backup': 
      K += 1 
      for z in range(length): 
       nbup.write(K + 1, z, p_routes[i][z]) 

     elif route[0][0] == 'E': 
      L += 1 
      for z in range(length): 
       ex.write(L, z, (p_routes[i][z])) 

     elif route[0][0] == 'G': 
      M += 1 
      for z in range(length): 
       gh.write(M ,z, p_routes[i][z]) 

    elif length == 2: 
     print "It is equal to 2" 
    else: 
     print "It must be less than 2" 

注意,if x > 2接着是else,在else將意味着值爲<= 2

也可以按如下方式向變量添加一個:L += 1,這是L = L + 1的簡寫。

+0

非常感謝您寶貴的建議..是的,語法錯誤確實來自非關閉方括號。在發佈之後也發現了,但是完成了代碼完成的其餘部分。現在它的工作正常。:-) – Neo