#python #return-value
#python #возвращаемое значение
Вопрос:
Когда я вызываю следующий метод, выполняются два возврата, и я не могу понять почему.
def Build(self, name = None):
if self.buildData:
try:
installData = self.buildData.Build(name)
return BuildResult(True, installData)
except:
pass
else:
Log("Application has no <build> data")
return BuildResult(False, None)
Что происходит, это:
- Метод вызывается с допустимой строкой, скажем, «abc»
- вызывается self.buildData.Build(имя) и запускается конструктор BuildResult(True, installData)
- Также выполняется последняя инструкция return
Комментарии:
1. Пожалуйста, исправьте ваше предложение «except:», чтобы напечатать исключение, которое там фактически возникло. Это поможет вам увидеть, что происходит.
2. Что такое
self.buildData
? Вы уверены, что это не обратная ссылка на родительский класс?
Ответ №1:
Ну, я предполагаю, что BuildResult() завершается с ошибкой, передается исключение, и вы переходите ко второму возврату. Вы можете легко протестировать это, просто добавив некоторую отладочную печать в except — никогда не отключайте исключения 🙂
Ответ №2:
При return BuildResult(True, installData)
выполнении BuildResult(True, installData
) вычисляется первым. Я предполагаю, что эта функция вызывает исключение, которое перехватывается и pass
редактируется. После этого return BuildResult(False, None)
выполняется.
Вы должны увидеть, какое исключение вызвано, и обработать его должным образом.
Я бы переписал функцию следующим образом:
def Build(self, name = None):
if self.buildData:
try:
installData = self.buildData.Build(name)
except: # TODO: catch only expected exception
pass
return BuildResult(True, installData)
else:
Log("Application has no <build> data")
return BuildResult(False, None)