Python SyntaxError :(““在生成器内部带有参数返回",",) [英] Python SyntaxError: ("'return' with argument inside generator",)
问题描述
我在Python程序中具有此功能:
I have this function in my Python program:
@tornado.gen.engine
def check_status_changes(netid, sensid):
como_url = "".join(['http://131.114.52:44444/ztc?netid=', str(netid), '&sensid=', str(sensid), '&start=-5s&end=-1s'])
http_client = AsyncHTTPClient()
response = yield tornado.gen.Task(http_client.fetch, como_url)
if response.error:
self.error("Error while retrieving the status")
self.finish()
return error
for line in response.body.split("\n"):
if line != "":
#net = int(line.split(" ")[1])
#sens = int(line.split(" ")[2])
#stype = int(line.split(" ")[3])
value = int(line.split(" ")[4])
print value
return value
我知道
for line in response.body.split
是一个生成器.但是我会将value变量返回给调用该函数的处理程序.这可能吗?我该怎么办?
is a generator. But I would return the value variable to the handler that called the function. It's this possible? How can I do?
推荐答案
在Python 2或Python 3.0-3.2中,不能将return
与一个值一起使用来退出生成器.您需要使用yield
加上return
而没有表达式:
You cannot use return
with a value to exit a generator in Python 2, or Python 3.0 - 3.2. You need to use yield
plus a return
without an expression:
if response.error:
self.error("Error while retrieving the status")
self.finish()
yield error
return
在循环本身中,再次使用yield
:
In the loop itself, use yield
again:
for line in response.body.split("\n"):
if line != "":
#net = int(line.split(" ")[1])
#sens = int(line.split(" ")[2])
#stype = int(line.split(" ")[3])
value = int(line.split(" ")[4])
print value
yield value
return
替代方法是引发异常或改用龙卷风回调.
Alternatives are to raise an exception or to use tornado callbacks instead.
在Python 3.3和更高版本中,在生成器函数中带有值的return
导致该值附加到StopIterator
异常.对于async def
异步生成器(Python 3.6及更高版本),return
仍必须是无值的.
In Python 3.3 and newer, return
with a value in a generator function results in the value being attached to the StopIterator
exception. For async def
asynchronous generators (Python 3.6 and up), return
must still be value-less.
这篇关于Python SyntaxError :(““在生成器内部带有参数返回",",)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!