我想知道如何在pyqt中管理多个异常
我有一个函数'encodeVideo()',该函数可能会触发多个异常。
def updateFilename(self):
try:
self.model.updateFilename(self.fileName)
except type_exc.PathIsEmpty as e:
self.errorDialog.errorTypeChanged(e)
self.errorDialog.show()
def updateOutput(self):
try:
self.model.updateOutput(self.encodeDialog.output)
except (type_exc.FileAlreadyExists, type_exc.PathNotExists) as e:
self.errorDialog.errorTypeChanged(e)
self.errorDialog.show()
def encodeVideo(self):
self.updateFilename()
self.updateOutput()
就我而言,很可能会触发updateFilname()
和updateOutput
中的错误。发生这种情况时,将显示一个对话框并报告这两个错误。我打算对多个异常进行“优先排序”。例如,当两个函数的错误都发生时,它仅报告updateFilename()
中的错误。我该怎么办?
答案 0 :(得分:1)
您希望在方法调用堆栈中尽可能多地处理异常;这通常意味着在第一次调用的用户界面中处理异常,如果在您的任何方法内部都发生了异常,您需要执行一些操作,则应捕获并重新抛出该异常,以下是一些示例:>
在您的代码中,从UI调用的第一个方法是encodeVideo
,因此,您要在此处捕获并处理异常:
def updateFilename(self):
self.model.updateFilename(self.fileName)
def updateOutput(self):
self.model.updateOutput(self.encodeDialog.output)
def encodeVideo(self):
try:
self.updateFilename()
self.updateOutput()
except (type_exc.PathIsEmpty, type_exc.FileAlreadyExists, type_exc.PathNotExists) as e:
self.errorDialog.errorTypeChanged(e)
self.errorDialog.show()
抛出异常
让我们想象一下,如果对updatedOutput
的调用失败,您想要做一些特定的事情,在这种情况下,您可以在inner方法中处理该异常,但是您应该再次抛出该异常,以便由调用方法:
def updateOutput(self):
try:
self.model.updateOutput(self.encodeDialog.output)
except type_exc.FileAlreadyExists, e:
print("Do something")
raise type_exc.FileAlreadyExists(e)
def encodeVideo(self):
try:
self.updateFilename()
self.updateOutput()
except (type_exc.PathIsEmpty, type_exc.FileAlreadyExists, type_exc.PathNotExists) as e:
self.errorDialog.errorTypeChanged(e)
self.errorDialog.show()
答案 1 :(得分:-1)
这基本上是一个异常和错误处理问题。因此,如果任何块中都存在错误,则系统会将其视为错误句柄或异常句柄。因此,如果第一个代码块给出了error,则下一个代码块包含另一个处理程序异常,因此系统将其视为错误和异常块非常简单。希望这对您有所帮助,也希望您的反馈意见得到赞赏。