2015-09-16 2 views
0

Пожалуйста, найдите приведенный ниже код в python 2.7.правильное формирование if if else else statement в Python

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':. Я не мог понять, почему эта ошибка возникает, поскольку я полагаю, что в этой строке нет синтаксической ошибки.

ex и gh - две переменные листа excel, созданные до этого кодового блока. И p_routes - это список из 2 градусов. Формат подобен p_routes = [['prov1' , 'address1' , 'No Backup'] , ['prov2', 'address2', 'Back1', 'Back2' ]]

Возможно, вы поняли, что длина внутреннего списка является переменным размером. Любые рекомендации будут высоко оценены. Извините за глупый вопрос, но я много раз искал и переформатировал мой блок if..else несколькими способами. Но каждый раз, когда я получаю эту ошибку.

Кстати, ранее синтаксическая ошибка была с L = L + 1. Веселая! Затем я сменил тип L на L = int(L). Теперь эта ошибка исчезла.

+6

Вы также получите сообщение об ошибке в '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' Кроме того, как 'pass' *, так и' 'print' заявление? –

+3

Это синтаксическая ошибка 'ex.write (L, z, (p_routes [i] [z])' должен быть этот 'ex.write (L, z, (p_routes [i] [z]))' и есть многие другие ошибки – The6thSense

+0

Спасибо большое за ваш быстрый и точный ответ. Как вы указали, да, это действительно проблема. – Neo

ответ

1

Примечание:

Никогда не забывайте закрывать ( с )

Else выполнит if none of the above case condition was right, так что вы не должны давать какие-либо условия для еще заявления

Не забудьте : в 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

Во-первых, как Вигнеш отметил, ваша ошибка на самом деле на предыдущей строке, как вы забыли закрыть ваш скобка ()

Во-вторых, положение еще для если, Elif , иначе структура не требует проверки. Вот видео, которое я сделал некоторое время назад с тем, как отбор работает в питона linked to relevant time

(Может быть не актуально) Также имейте в виду, с вашей текущей логикой, что происходит, если: len(p_routes[i]) это 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, то остальное будет означать значение <= 2.

Также можно добавить один к переменной следующим образом: L += 1, это сокращение от L = L + 1.

+0

Большое спасибо за ваше ценное предложение .. Да, синтаксическая ошибка исходила из незакрывающей скобки. также выяснилось сразу после публикации, но слишком bz выполнил оставшуюся часть кода. Теперь его работа прекрасна. :-) – Neo