Как перезапустить приложение PyQt после возникновения исключения - PullRequest
0 голосов
/ 14 мая 2018

Я построил несколько диалогов об ошибках в исключениях в моем коде.Все работает, за исключением того, что программа продолжает выполнять код после исключения.Поэтому я встроил sys.exit():

try:
    hdf = pd.HDFStore(filepath_hdf)
except:
    QMessageBox.about(self, 'Error!','Filepath can't be read')
    sys.exit()

К сожалению, это закрывает все приложение.Как мне «перезапустить» приложение, если возникло исключение?Под этим я имею в виду, как вернуться в начальную точку приложения?

1 Ответ

0 голосов
/ 14 мая 2018

Для этого и используется предложение else оператора try/except:

try:
    hdf = pd.HDFStore(filepath_hdf)
except:
    QMessageBox.warning(self, 'Error', 'Filepath cannot be read')
else:
    # do normal stuff here...

Не должно быть необходимости перезапускать все приложение в случае возникновения ошибки, если только ошибка не является действительно фатальной (что означало бы, что буквально невозможно продолжить работу и, следовательно, требовало немедленного выключения). Весь смысл обработки исключений в том, чтобы иметь возможность восстанавливать изящно от нефатальных ошибок.

Нет общего способа вернуть приложение в исходное состояние. Каждое приложение отличается от других, поэтому вам нужно написать собственный метод «reset», который очищает текущее состояние и при необходимости повторно инициализирует определенные элементы графического интерфейса. Этот метод «сброса», скорее всего, будет очень похож на код установки / инициализации, который вы уже используете. Поэтому следует просто провести рефакторинг этого кода в отдельный метод, который будет вызываться при запуске приложения, а затем всякий раз, когда требуется перезагрузка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...