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吗?
答案 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()