我试图从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
与提出错误联系起来,但这只是表达回报的一种方式吗?谢谢。
答案 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
代替特殊的异常类。