为了账号安全,请及时绑定邮箱和手机立即绑定

在 Python 中循环一个函数

在 Python 中循环一个函数

杨魅力 2021-07-08 14:04:02
我有一个功能用于列表中列出的多个设备。如果它不适用于特定设备并且脚本中断,则会引发错误。def macGrabber(child,switch,cat = False):    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)    except pexpect.TIMEOUT:        print child.before,child.after        child.close()        raise    macs = child.before    child.close()    macs = macs.splitlines()    print('Connection to %s CLOSED' % switch)    return macs我们可以在它转到“Except”之前循环它(重试多次)吗?或者如果失败,我们可以跳过它并尝试下一个设备吗?
查看完整描述

2 回答

?
慕侠2389804

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结果。


查看完整回答
反对 回复 2021-07-21
?
皈依舞

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!


查看完整回答
反对 回复 2021-07-21
  • 2 回答
  • 0 关注
  • 225 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信