如果用python检查条件

时间:2018-02-19 20:23:20

标签: python

      if not ping_device(ip):
          if not reboot_device(device_1)
              logger.error("Unable to reboot.. Serious issue")
              break
          logger.info("HARD Rebooted")
          if not ping_device(ip):
              logger.error("Ping failed after hard reboot")
          else:
              logger.info("Pinged success after reboot")
     else:
         logger.info("Pinged")
         logger.info("Reboot passed")
         logger.info("Getting uptime")
         sw_version_check = get_sw_version(ip)
         check_upgrade()
         :
         :
         :
         :

这是我的一段代码。现在,如果第一行中的 ping_device fn成功,我没有问题。其他部分出现在图片中。

现在,如果我的第一行 ping_device 失败,我会调用 reboot_device fn。重新启动后,我再次调用ping函数来检查我的设备是否在线。

重启后ping成功后,我需要使用sw_version_check,check_upgrade()和其余代码遍历的第一个 if 条件的 else 部分如上所述:

ping失败后我的逻辑会继续使用sw_version_chec和check_upgrade吗?

2 个答案:

答案 0 :(得分:0)

你可以有一个单独的变量,比如说doUpgrade,初始化为False并在第一部分的任何一点设置为True,你确定需要升级。然后测试该变量以查看是否需要执行升级代码。

答案 1 :(得分:0)

尝试使用异常,它们有助于使这种类型的控制流更易于推理,并且更多" Pythonic":

def reboot_device(device):
    if not your_reboot_device_fn(device):
        raise DeviceRebootError('Unrecoverable reboot error')
    else:
        pass  # Or anything else you want to do on success.


def ping_device(ip, device, did_try_reboot=False):
    if not your_ping_device_fn(ip):
        if did_try_reboot:
            raise DevicePingError('Ping failed after hard reboot')
        else:
            try:
                reboot_device(device)
            except DeviceRebootError as e:
                logging.error(e)
                raise
            else:
                logger.info("HARD Rebooted")
                ping_device(ip, device, did_try_reboot=True)
    else:
        pass  # Or anything else you want to do on success.

try:
    ping_device(ip, device_1)
except DevicePingError as e:
    logging.error(e)
# NOTE: DeviceRebootError isn't caught so it will end the program.
else:
    logging.info('Pinged')
    sw_version_check = get_sw_version(ip)
    check_upgrade()