App Engine异步语法 - 在这个例子中“raise”做了什么?

时间:2014-05-26 18:54:42

标签: python google-app-engine

我试图从this page

中理解这个代码块
@ndb.tasklet
def get_cart_plus_offers(acct):
    cart, offers = yield get_cart_async(acct), get_offers_async(acct)
    raise ndb.Return((cart, offers))

在这种情况下raise只是作为return声明吗?我通常会将raise与提出错误联系起来,但这只是表达回报的一种方式吗?谢谢。

1 个答案:

答案 0 :(得分:3)

Tasklets是生成器,在生成器中,return具有不同的语义;它结束生成器。因此,您无法使用return从Python 2中的生成器返回值:

>>> def foo():
...     yield None
...     return 1
... 
  File "<stdin>", line 3
SyntaxError: 'return' with argument inside generator

因此,您需要一种不同的机制来返回值并结束tasklet;使用raise代替特殊的异常类。