You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tornado 6.0+用Future替代callback解决参数错误问题

Tornado 6.0+ 替换 callback 使用 Future 解决 TypeError 问题

运行Tornado脚本发送请求并将响应追加到本地HTML时,出现以下错误:

TypeError: init() got an unexpected keyword argument 'callback'

Tornado 6.0版本已移除AsyncHTTPClient.fetch()的callback参数,需改用方法返回的Future对象。以下是修改后的完整代码:

import asyncio
import json
import tornado.httpclient
import tornado.web
import tornado.httpserver
from tornado.options import define, options

define('port', default=9060, help="运行端口9060", type=int)

class requestFour(tornado.web.RequestHandler):
    async def get(self):
        # arg = self.get_argument('stock')
        client = tornado.httpclient.AsyncHTTPClient()
        # 直接await获取响应,无需callback
        response = await client.fetch('https://books.toscrape.com')
        
        # 注意:books.toscrape.com返回的是HTML页面,不是JSON,这里调整处理逻辑
        # 如果目标接口是JSON,再用json.loads(response.body)
        body = response.body.decode('utf-8')
        
        self.write(f"""
                    <div style="text-align: center">
                    <div style="font-size: 72px">页面内容预览</div>
                    <div style="font-size: 24px; margin-top: 20px">部分HTML内容:</div>
                    <div style="font-size: 16px; width: 80%; margin: 0 auto; text-align: left; white-space: pre-wrap">{body[:500]}...</div>
                    </div>
                    """)
        self.finish()

def my_app():
    app = tornado.web.Application(handlers=[(r'/', requestFour)])
    http_server = tornado.httpserver.HTTPServer(app)
    return http_server

async def main():
    app = my_app()
    app.listen(options.port)
    shutdown_event = asyncio.Event()
    await shutdown_event.wait()

if __name__ == '__main__':
    asyncio.run(main())

关键修改点:

  • 移除callback参数:调用client.fetch()时不再传callback,而是通过await(或yield)直接获取响应对象
  • 合并响应处理逻辑:不需要单独的on_response方法,直接在get方法内处理响应结果
  • 修正JSON解析错误:原目标地址返回的是HTML而非JSON,因此改用response.body.decode('utf-8')解析文本,若接口返回JSON则使用json.loads(response.body)
  • 改用原生async/await:替换tornado.gen.coroutine装饰器,使用Python原生异步语法,代码更简洁易读(Tornado 5.0+支持)

内容的提问来源于stack exchange,提问作者joe_bill.dollar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 14:20:22