为什么在代码块中即使缩进也是正确的,但也会给出语法错误?

时间:2018-11-10 09:36:47

标签: python shell

我有这样的代码,但是else块给出了无效的语法。即使我感觉缩进是正确的?有人可以帮忙吗?

import subprocess

def ipRouteAddDelToDCNM(addDelRoute, network, prefix, gw):
    try:
        ha_peer = "sed -n 's/^PEER_ETH0_IP=\\(.*\\)/\\1/p' /root/packaged-files/properties/ha-setup.properties"
        peer_ip = subprocess.check_output(ha_peer, shell=True).strip()
        ha_role = '/usr/local/cisco/dcm/fm/ha/ha_role.sh'
        state = subprocess.check_output(cmd, shell=True)
        is_native_ha = getNativeHaStatus()
        if is_native_ha == "SUCCESS" and "Active" in state:
           #ha_role = '/usr/local/cisco/dcm/fm/ha/ha_role.sh'
           #state = subprocess.check_output(cmd, shell=True)
           if "Active" in state:
               cmd = "route %s -net %s/%s gw %s"%(addDelRoute, network, prefix, gw)
               logDHCP(cmd)
               os.popen(cmd).read()
               if addDelRoute == "add":
                  if not os.path.exists("/etc/sysconfig/network-scripts/route-eth1"):
                     with open("/etc/sysconfig/network-scripts/route-eth1","w+") as fw:
                          routeLine = "%s/%s via %s dev eth1 \n"%(network, prefix, gw)
                          fw.write(routeLine)

                  file_transfer = "scp /etc/sysconfig/network-scripts/route-eth1 root@%s:/etc/sysconfig/network-scripts/route-eth1"%(peer_ip)
                  file_copy = subprocess.check_output(file_transfer, shell=True)
                  some_format = "/etc/sysconfig/network-scripts/ifup-routes eth1"
                  some = subprocess.check_output(some_format, shell=True)
                  else:
                       with open("/etc/sysconfig/network-scripts/route-eth1","a") as fw:
                            routeLine = "%s/%s via %s dev eth1 \n"%(network, prefix, gw)
                            fw.write(routeLine)

                       file_transfer = "scp /etc/sysconfig/network-scripts/route-eth1 root@%s:/etc/sysconfig/network-scripts/route-eth1"%(peer_ip)
                       file_copy = subprocess.check_output(file_transfer, shell=True)
                       some_format = "/etc/sysconfig/network-scripts/ifup-routes eth1"
                       some = subprocess.check_output(some_format, shell=True)

               elif addDelRoute == "del":
                    with open("/etc/sysconfig/network-scripts/route-eth1","r+") as f:
                    lines = f.readlines()
                    routeLine = "%s/%s via %s dev eth1"%(network, prefix, gw)
                    f.seek(0)
                    for line in lines:
                        if routeLine not in line:
                           f.write(line)
                    f.truncate()

                    file_transfer = "scp /etc/sysconfig/network-scripts/route-eth1 root@%s:/etc/sysconfig/network-scripts/route-eth1"%(peer_ip)
                    file_copy = subprocess.check_output(file_transfer, shell=True)
                    some_format = "/etc/sysconfig/network-scripts/ifup-routes eth1"
                    some = subprocess.check_output(some_format, shell=True)
    except:
        pass

2 个答案:

答案 0 :(得分:1)

您的else块没有正确缩进,很明显,就像上面一样,在相同的缩进级别上,您有一个不是if的语句。

import subprocess

def ipRouteAddDelToDCNM(addDelRoute, network, prefix, gw):
    try:
        ha_peer = "sed -n 's/^PEER_ETH0_IP=\\(.*\\)/\\1/p' /root/packaged-files/properties/ha-setup.properties"
        peer_ip = subprocess.check_output(ha_peer, shell=True).strip()
        ha_role = '/usr/local/cisco/dcm/fm/ha/ha_role.sh'
        state = subprocess.check_output(cmd, shell=True)
        is_native_ha = getNativeHaStatus()
        if is_native_ha == "SUCCESS" and "Active" in state:
           #ha_role = '/usr/local/cisco/dcm/fm/ha/ha_role.sh'
           #state = subprocess.check_output(cmd, shell=True)
           if "Active" in state:
               cmd = "route %s -net %s/%s gw %s"%(addDelRoute, network, prefix, gw)
               logDHCP(cmd)
               os.popen(cmd).read()
               if addDelRoute == "add":
                  if not os.path.exists("/etc/sysconfig/network-scripts/route-eth1"):
                     with open("/etc/sysconfig/network-scripts/route-eth1","w+") as fw:
                          routeLine = "%s/%s via %s dev eth1 \n"%(network, prefix, gw)
                          fw.write(routeLine)

                  file_transfer = "scp /etc/sysconfig/network-scripts/route-eth1 root@%s:/etc/sysconfig/network-scripts/route-eth1"%(peer_ip)
                  file_copy = subprocess.check_output(file_transfer, shell=True)
                  some_format = "/etc/sysconfig/network-scripts/ifup-routes eth1"
                  some = subprocess.check_output(some_format, shell=True)
              else: **<--- Should be reindented**
                   with open("/etc/sysconfig/network-scripts/route-eth1","a") as fw:
                        routeLine = "%s/%s via %s dev eth1 \n"%(network, prefix, gw)
                        fw.write(routeLine)

                   file_transfer = "scp /etc/sysconfig/network-scripts/route-eth1 root@%s:/etc/sysconfig/network-scripts/route-eth1"%(peer_ip)
                   file_copy = subprocess.check_output(file_transfer, shell=True)
                   some_format = "/etc/sysconfig/network-scripts/ifup-routes eth1"
                   some = subprocess.check_output(some_format, shell=True)

           elif addDelRoute == "del":
                with open("/etc/sysconfig/network-scripts/route-eth1","r+") as f:
                lines = f.readlines()
                routeLine = "%s/%s via %s dev eth1"%(network, prefix, gw)
                f.seek(0)
                for line in lines:
                   if routeLine not in line:
                      f.write(line)
                f.truncate()

                file_transfer = "scp /etc/sysconfig/network-scripts/route-eth1 root@%s:/etc/sysconfig/network-scripts/route-eth1"%(peer_ip)
                file_copy = subprocess.check_output(file_transfer, shell=True)
                some_format = "/etc/sysconfig/network-scripts/ifup-routes eth1"
                some = subprocess.check_output(some_format, shell=True)
    except:
        pass

答案 1 :(得分:1)

Python要求if / else像这样缩进:

if ...:
    ...
else:
    ...

您的代码如下:

if ... :
    ...
    else:
        ...