2 回答
TA贡献1719条经验 获得超6个赞
对于第一个问题,是的,您可以重试多次。保留一个错误计数器,将整个try/except循环包装起来,当您遇到异常时,检查错误计数器并继续循环,如果它小于(例如)5,否则会像您已经在做的那样引发错误。
error_count = 0
while True:
try:
if cat is False:
child.expect('.#')
child.sendline('sh mac address-table | no-more')
else:
child.sendline('sh mac address-table dynamic | i Gi')
child.expect('.#', timeout=3000)
break
except pexpect.TIMEOUT:
++error_count
if error_count < 5:
continue
print child.before,child.after
child.close()
raise
对于第二个问题,是的,如果设备失败,您可以跳过该设备,只需放入return Noneexcept 处理即可。但是您还需要调整调用代码以正确处理None结果。
TA贡献1851条经验 获得超3个赞
如果您想在程序不崩溃的情况下继续循环,您需要macGrabber在try...except块内调用并调用continue。
multiple_devices = [
(child1, switch1, cat1),
(child2, switch2, cat2),
...,
]
for device in multiple_devices:
try:
macGrabber(*device)
except pexpect.TIMEOUT as e:
print(f'{device} timed out')
print(e)
continue # <--- Keep going!
添加回答
举报