Как избежать того, чтобы команда 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

витые документы

Другие вопросы по тегам