gpt4 book ai didi

python - Tornado .gen.BadYieldError : yielded unknown object None

转载 作者:行者123 更新时间:2023-11-28 18:31:08 24 4
gpt4 key购买 nike

我正在使用 Python 和 Tornado 构建带有 jquery UI slider 元素的基本应用程序。我的目标是,当用户与 slider 交互时,它将向 python 函数发送一个值,结果将显示在 python 控制台中。我的 custom.js 是:

$(function() {
$("#slider-range-max").slider({
min : 0,
max : 100,
slide : function(event, ui) {
$("#amount").val(ui.value);
ajax({
url: "/action",
data: {parameter:ui.value},
});
},
});
$("#amount").val($("#slider-range-max").slider("value"));
});

主要.py

define("port", default=8888, help="run on the given port", type=int)
class Application(tornado.web.Application):
def __init__(self):
handlers = [
(r"/", AuxHandler),
(r"/action", MainHandler)
]
settings = {
"template_path": Settings.TEMPLATE_PATH,
"static_path": Settings.STATIC_PATH,
}

tornado.web.Application.__init__(self, handlers, **settings)

class AuxHandler(tornado.web.RequestHandler):
def get(self):
self.render("index.html")

class MainHandler(tornado.web.RequestHandler):
@asynchronous
@tornado.gen.coroutine
def get(self):
speed = int(self.get_argument("parameter"))
p=P()
if speed > 1:
p.startApp(speed)
if speed<1:
p.stopApp()

def main():
tornado.options.parse_command_line()
http_server = tornado.httpserver.HTTPServer(Application())
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
if __name__ == "__main__":
main()

和p.py

@tornado.gen.coroutine
def startApp(self,speed):
x= yield print(speed)
while True:
yield x

在控制台我收到这个:

12
[I 160516 12:47:19 web:1946] 304 GET /action?parameter=12 (::1) 0.00ms
13
[I 160516 12:47:19 web:1946] 304 GET /action?parameter=13 (::1) 15.60ms
14
[E 160516 12:47:19 concurrent:336] Future <tornado.concurrent.Future object at 0x02FAA7D0> exception was never retrieved: Traceback (most recent call last):
File "C:\Users\home\AppData\Local\Programs\Python\Python35-32\lib\site-packages\tornado\gen.py", line 1014, in run
yielded = self.gen.throw(*exc_info)
File "E:\work\python\Example2\p.py", line 11, in startApp
x= yield print(speed)
File "C:\Users\home\AppData\Local\Programs\Python\Python35-32\lib\site-packages\tornado\gen.py", line 1008, in run
value = future.result()
File "C:\Users\home\AppData\Local\Programs\Python\Python35-32\lib\site-packages\tornado\concurrent.py", line 232, in result
raise_exc_info(self._exc_info)
File "<string>", line 3, in raise_exc_info
File "C:\Users\home\AppData\Local\Programs\Python\Python35-32\lib\site-packages\tornado\gen.py", line 1090, in handle_yield
self.future = convert_yielded(yielded)
File "C:\Users\home\AppData\Local\Programs\Python\Python35-32\lib\functools.py", line 743, in wrapper
return dispatch(args[0].__class__)(*args, **kw)
File "C:\Users\home\AppData\Local\Programs\Python\Python35-32\lib\site-packages\tornado\gen.py", line 1222, in convert_yielded
raise BadYieldError("yielded unknown object %r" % (yielded,))
tornado.gen.BadYieldError: yielded unknown object None

我不知道如何处理这个“yielded unknown object None”错误,或者我的方法是否正确。任何想法都会非常有帮助。

最佳答案

异常来自 yield print(speed)print 返回 None,您不能输出 None。您只能产生 Futures 和类似的可等待对象,通常是在产生调用协程的结果时。参见 Refactoring Tornado Coroutines获取调用协程的指南。

如果你想打印速度的值,就这样做:

def startApp(self, speed):
print(speed)

关于python - Tornado .gen.BadYieldError : yielded unknown object None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37252597/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com