Soru Python SyntaxError: (“jeneratörde argüman ile 'geri dön”,)


Python programımda bu işlevi var:

@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

bunu biliyorum

for line in response.body.split

bir jeneratördür. Ama ben değer değişkeni işlev olarak adlandırılan işleyiciye döndürürüm. Bu mümkün mü? Nasıl yapabilirim?


18
2018-04-04 11:01


Menşei


yield value  . - Katriel
Zaten denedim .. ama aynı hatayı alıyorum ... Sanırım bir jeneratöre dönüş yapmak imkansız ... - sharkbait
for döngü bir jeneratör değil; tüm işlev, çünkü yield bunun içinde ifade. - geoffspear
Açıklama için teşekkürler! - sharkbait


Cevaplar:


Kullanamazsın return Python 2 veya Python 3.0 - 3.2'deki bir jeneratörden çıkmak için bir değer. Kullanmalısın yield artı bir return  olmadan ifade:

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

Döngüsünde, kullanım yield tekrar:

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

Alternatifler bir istisna oluşturmak veya bunun yerine kasırga geri çağrılarını kullanmaktır.

Python 3.3 ve daha yeni, return Bir jeneratör fonksiyonundaki bir değere bağlı olarak, StopIterator istisna. İçin async def Asenkron jeneratörler (Python 3.6 ve üstü), return hala değer düşük olmalıdır.


25
2018-04-04 11:05



Harika! Hatanın içinde olduğunu düşünüyorum return value - sharkbait