如何在引发异常后重新启动 PyQt 应用程序

How to restart PyQt application after exception is raised

我在代码的异常中构建了一些错误对话框。一切正常,除了程序在异常发生后继续执行代码。所以我内置了 sys.exit():

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

不幸的是,这会关闭整个应用程序。当出现异常时,我如何 "restart" 应用程序?我的意思是如何return到应用程序的起点?

这就是 try/except 语句的 else 子句的用途:

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

如果发生错误,应该不需要重新启动整个应用程序,除非错误确实是致命的(这意味着它实际上不可能继续 运行,因此需要立即关闭)。异常处理的全部意义在于能够从非致命错误中优雅地恢复。

没有通用的方法return 应用程序进入其启动状态。每个应用程序都是不同的,因此您需要编写自己的 "reset" 方法来清除当前状态并在适当的时候重新初始化某些 gui 元素。此 "reset" 方法很可能看起来很像您已经在使用的某些 setup/init 代码。因此,将代码重构为一个单独的方法应该很重要,该方法将在应用程序启动时调用,然后在需要重置时调用。