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

Postman发送POST请求时脑卒中预测Flask API出现500错误

问题分析与修复方案

核心错误点

  • 装饰器绑定格式错误:@app.route('/predict',methods=['POST']) 下方的注释缩进异常,导致装饰器未正确绑定到predict函数,这是触发500错误的直接原因。
  • 输入特征缺失:构造预测输入数组input_query时遗漏了work_type参数,模型训练时的特征数量与预测输入不匹配,引发维度错误。
  • 数据类型不匹配:通过request.form.get()获取的参数均为字符串类型,而模型需要数值/编码后的特征值,直接传入会导致预测逻辑崩溃。
  • 潜在模型路径问题:加载模型时使用相对路径'Stroke.pkl',若脚本运行目录与模型文件所在目录不一致,会导致模型加载失败。

修正后的代码

from flask import Flask, request, jsonify
import pickle
import numpy as np

# 优先使用绝对路径加载模型,避免路径问题
try:
    model = pickle.load(open('Stroke.pkl','rb'))
except FileNotFoundError:
    raise Exception("模型文件Stroke.pkl未找到,请检查路径")

app = Flask(__name__)

@app.route('/')
def home():
    return "Stroke Disease Prediction App"

# 装饰器直接绑定函数,注释移至函数内部
@app.route('/predict',methods=['POST'])
def predict():
    # 预期输入特征:gender,age,hypertension,heart_disease,ever_married,work_type,Residence_type,avg_glucose_level,bmi,smoking_status
    
    try:
        # 将参数转换为模型训练时要求的数据类型(需与训练时的编码规则一致)
        gender = int(request.form.get('gender'))
        age = float(request.form.get('age'))
        hypertension = int(request.form.get('hypertension'))
        heart_disease = int(request.form.get('heart_disease'))
        ever_married = int(request.form.get('ever_married'))
        work_type = int(request.form.get('work_type'))  # 补充缺失的特征
        Residence_type = int(request.form.get('Residence_type'))
        avg_glucose_level = float(request.form.get('avg_glucose_level'))
        bmi = float(request.form.get('bmi'))
        smoking_status = int(request.form.get('smoking_status'))

        # 构造与模型训练时完全匹配的特征输入数组
        input_query = np.array([[gender, age, hypertension, heart_disease, ever_married, 
                                work_type, Residence_type, avg_glucose_level, bmi, smoking_status]])

        result = model.predict(input_query)[0]

        return jsonify({'Stroke_Disease': str(result)})
    
    except Exception as e:
        # 返回具体错误信息便于调试
        return jsonify({'error': str(e)}), 400

if __name__=='__main__':
    app.run(debug=True)

额外注意事项

  • 特征编码一致性:确保Postman传入的分类参数(如gender、work_type等)的编码与模型训练时使用的编码完全一致,比如gender若训练时用0代表男、1代表女,Postman需传递对应数值。
  • Postman请求格式:选择form-data或x-www-form-urlencoded格式传递参数,与代码中request.form.get()的获取方式匹配。
  • 调试模式利用:Flask的debug模式会在控制台输出详细错误栈,可快速定位剩余问题。

内容的提问来源于stack exchange,提问作者Hezron mphande

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:05:44