我试图理解 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
与引发错误联系起来,但这只是表达返回的一种方式吗?谢谢。
最佳答案
Tasklet 旨在成为生成器,在生成器中,返回
具有不同的语义;它结束生成器。因此,您不能使用 return
从 Python 2 中的生成器返回值:
>>> def foo():
... yield None
... return 1
...
File "<stdin>", line 3
SyntaxError: 'return' with argument inside generator
因此,您需要一种不同的机制来返回值并结束 tasklet;而是使用带有特殊异常类的 raise
。
关于python - App Engine 异步语法 - "raise"在此示例中有何作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23876186/