2013-04-04 5 views
16

私はPythonプログラムでこの機能を持っている:のPythonでSyntaxError:( "発電機内部の引数で '復帰'"、)

@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変数を返します。これは可能ですか?どのようにできるのか?

+0

「yield value」。 – katrielalex

+0

すでに試してみましたが、同じエラーが発生しました...ジェネレータにリターンを入れることは不可能だと思います... – sharkbait

+9

'for'ループはジェネレータではありません。あなたが 'yield'ステートメントを持っているので、関数全体があります。 – geoffspear

答えて

23

returnに値を指定してジェネレータを終了することはできません。再びyieldを使用し、ループ自体で

if response.error: 
    self.error("Error while retrieving the status") 
    self.finish() 
    yield error 
    return 

:あなたはせずに式をyieldプラスreturnを使用する必要が

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 

代替の例外を発生させるか、代わりにコールバックを竜巻使用することです。

+0

素晴らしい!私はエラーが '戻り値'にあると思った – sharkbait

関連する問題