2016-06-07 4 views
0

Я разрабатываю асинхронный веб-сервис с Twisted Klein. Часть кода следующим образом:Как избежать команды yield в python выдает исключения каждый раз?

@inlineCallbacks 
def test(input1): 
    try: 
     result = yield function(input1) 
     print result 
     returnValue(result) 
    except: 
     returnValue("None") 
     pass 

У меня есть эта функция test как часть моего веб-сервиса, каждый раз, когда я назвал test функцию из другой функции в возвращений «None». Однако на экране сервера он выводит правильный результат, который я хочу (строка print result в попытке правильно выполнена, только returnValue(result) не используется). Я не очень хорошо разбираюсь в асинхронном кодировании, но есть ли что-нибудь, что я должен быть осторожным в попытке, кроме как вместе с выходом? Благодарю.

+3

Почему вы используете голую 'except'? Вы должны поймать конкретный тип исключения, которого вы ожидаете. Я мало что знаю о Twisted Klein, но быстрый поиск в Google говорит, что они [используют исключения для моделирования сопрограмм] (http://tavendo.com/blog/post/going-asynchronous-from-flask-to-twisted -klein /), поэтому голый 'except' будет сильно закручиваться. – user2357112

+0

Поэтому я изменяю это из флеш-кода, и я вызываю api, который может отбросить исключение, я не хочу, чтобы он разбился, поэтому я использую try/except, чтобы сделать это. Может быть, я должен удалить этот голый, кроме того, и посмотреть, как он работает? – JLTChiu

+0

Это действительно сработало после того, как я удалил голый, кроме. Наверное, мне нужно указать все возможные исключения из api. Я хочу называть вас правильным ответом, но вы в комментарии – JLTChiu

ответ

2

Прежде всего, у вас никогда не должно быть оголенного предложения except. (Есть исключения, но в целом это лучше ловить конкретные ошибки.)

Во-вторых, из скрученных документы на ReturnValue:

Примечание: это в настоящее время осуществляется за счет повышения исключения, производный от BaseException. Возможно, вы захотите изменить любые предложения «except:» на предложение «исключая исключение:», чтобы не уловить это исключение.

Также: пока эта функция будет работать при вызове из произвольных функций, вызываемых внутри генератора, не полагайтесь на это поведение.

Что происходит, ваш правильный результат печати, то вы звоните returnValue, который вызывает исключение, в результате чего ваш код возврата None

twisted docs

 Смежные вопросы

  • Нет связанных вопросов^_^