当我的一个模块引发错误时,我提示询问用户是否要再次尝试运行该方法。如果他们选择“是”,则弹出窗口将清除,该方法将再次运行。如果他们选择“否”,则应该将NPSManaged.switchForm('MAIN')返回到主屏幕,但该表单没有更改。
我已将其从while循环中删除。我还尝试过在更改表单之前将表单的editing属性设置为false。我在switchForm之前放入了print()语句,以确保代码块正在执行。
class RunAnsible(ns.Form):
...
def errorHandling(self, function, *args):
while True:
try:
function(*args)
break
except RunError:
unreachable = ns.notify_yes_no('Run Error', title="Ansible Error - Run Error", form_color='DANGER', editw=1)
if unreachable == True:
self.display()
else:
self.parentApp.switchForm('MAIN')
except FailedError:
unreachable = ns.notify_yes_no('Failed Error', title="Ansible Error - Failed", form_color='DANGER', wrap=True, editw=1)
if unreachable == True:
self.display()
else:
self.parentApp.switchForm('MAIN')
# If an UnreachableError is raised, pop up a notification asking if the IP is correct
except UnreachableError:
runAgain = ns.notify_yes_no('Host was unreachable. Would you like to try and run again?', title='Host Unreachable', form_color='DANGER', editw=1)
if runAgain == True:
self.display()
else:
self.parentApp.switchForm('MAIN')
except TimeoutError:
ns.notify_wait(message='Timeout Error Raised')
except UnknownError:
unreachable = ns.notify_yes_no('Unknown Error', title="Ansible Error - Unknown", form_color='DANGER', wrap=True, editw=1)
if unreachable == True:
self.display()
else:
self.parentApp.switchForm('MAIN')
如果while循环开始时的方法引发异常,则由npyscreen调用通知窗口来处理。如果notify_yes_no返回false,则应将NPSManagedApp更改为MAIN表单。