Когда в одном из моих модулей возникает ошибка, я спрашиваю, не хочет ли пользователь попробовать запустить метод снова. Если они выбирают «Да», всплывающее окно очищается, и метод запускается снова. Если они выбирают «Нет», предполагается, что исключение NPSManaged.switchForm ('MAIN') возвращается на главный экран, но форма не меняется.
Я удалил его из цикла while. Я также попытался установить атрибут редактирования формы в false перед изменением формы. Я вставил оператор print () перед switchForm, чтобы гарантировать выполнение блока кода.
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.