Как избежать того, чтобы команда yield в python выбрасывала исключения каждый раз?
Я разрабатываю асинхронный веб-сервис с Twisted Klein. Часть кода выглядит следующим образом:
@inlineCallbacks
def test(input1):
try:
result = yield function(input1)
print result
returnValue(result)
except:
returnValue("None")
pass
у меня есть это test
функционировать как часть моего веб-сервиса, каждый раз, когда я звонил test
функция из другой функции возвращает "None". Тем не менее, на экране сервера он выводит правильный результат, который я хочу (print result
строка в try выполнена правильно, просто returnValue(result)
не используется). Я не очень знаком с асинхронным кодированием, но есть ли что-то, с чем я должен быть осторожен, кроме как с yield? Благодарю.
1 ответ
Прежде всего, вы никогда не должны иметь голый except
пункт. (Есть исключения, но, вообще говоря, лучше ловить определенные ошибки.)
Во-вторых, из искаженных документов на returnValue:
Примечание. В настоящее время это реализовано путем вызова исключения, полученного из BaseException. Возможно, вы захотите изменить любое предложение "кроме:" на предложение "кроме исключения": чтобы не перехватывать это исключение.
Также: хотя эта функция в настоящее время будет работать при вызове из произвольных функций, вызываемых из генератора, не полагайтесь на это поведение.
То, что происходит, это ваш правильный результат печати, то вы звоните returnValue
, который вызывает исключение, заставляя ваш код возвращаться None