Вы хотите обрабатывать исключения как можно выше в вашем стеке вызовов методов;это обычно означает, что исключения обрабатываются в пользовательском интерфейсе, где был сделан первый вызов, если внутри какого-либо из ваших методов вам нужно что-то делать, если возникает исключение, вы должны перехватить и повторно выбросить исключение, вот несколько примеров:
В вашем коде первым методом, который вызывается из пользовательского интерфейса, является 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
завершится неудачно, вы захотите сделать что-то конкретное, в этом случае вы можете обработать исключение во внутреннем методе, но вы должны снова сбросить его, чтобы оно былообрабатывается методом вызова:
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()