Flask视图函数返回列表引发TypeError:返回类型无效问题求助
解决Flask视图返回类型不合法的问题
错误原因
Flask要求视图函数必须返回字符串、字典、元组、Response实例或WSGI可调用对象,你当前直接返回了包含pytube.Stream对象的列表,既不属于合法响应类型,且Stream对象无法直接被JSON序列化,因此触发TypeError。
解决方案
需要将列表中的Stream对象转换为可序列化的字典,再通过Flask的jsonify()方法返回合法的JSON响应:
修改后的完整代码
from flask import Flask, jsonify, request from pytube import YouTube app = Flask(__name__) @app.route('/youtube', methods=['POST']) def hello_world(): url = request.form['d_url'] yt_video = YouTube(url) videos = yt_video.streams res_list = list(enumerate(videos)) # 将Stream对象转换为可序列化的字典 processed_streams = [] for idx, stream in res_list: stream_info = { "index": idx, "itag": stream.itag, "resolution": stream.resolution, "mime_type": stream.mime_type, "filesize_mb": round(stream.filesize_mb, 2) # 保留两位小数的文件大小(MB) } processed_streams.append(stream_info) # 用jsonify返回合法响应 return jsonify(processed_streams) if __name__ == "__main__": app.run(debug=True)
关键修改点
- 遍历
res_list,提取每个Stream对象的核心属性(如itag、分辨率、媒体类型等)存入字典,确保数据可被JSON序列化。 - 使用
jsonify()方法将处理后的列表包装为Flask认可的Response实例,自动设置正确的Content-Type响应头。
内容的提问来源于stack exchange,提问作者Imran Iqbal
相关产品推荐
相关产品推荐

