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

Flask API调用报错TypeError:mylemmatize()参数缺失求助

问题分析与解决方案

我一眼就发现了问题的核心——你把Flask的路由装饰器@app.route错加到了工具函数mylemmatize上,而不是真正处理请求的glcoding函数!

错误原因详解

  • 当你用@app.route("/glcoding", methods=['POST'])装饰mylemmatize后,Flask会把这个函数当成/glcoding路径的请求处理函数。但Flask调用路由函数时,默认不会传入额外参数(除非路由定义了变量),可你的mylemmatize强制要求传入token参数,这就直接导致了调用时抛出TypeError: mylemmatize() takes exactly 1 argument (0 given)的错误。
  • 真正负责处理请求的glcoding函数反而没有被路由装饰器标记,完全没起到作用。

除此之外,你的代码还有几个小问题需要修正:

  1. glcoding函数里使用了pd(pandas)但没有导入,运行时会触发NameError。
  2. 调用API时,你把data写成了JSON字符串,直接传字典给requests.post的json参数会更规范,不需要手动转成字符串。

修正后的API代码

import numpy as np
import pandas as pd  # 补上缺失的pandas导入
from nltk.corpus import wordnet
from nltk.stem.wordnet import WordNetLemmatizer
import re
from sklearn.externals import joblib
import warnings

warnings.filterwarnings('ignore')
from flask import Flask, jsonify, request


app = Flask(__name__)

# 移除mylemmatize上的路由装饰器,它只是一个文本处理工具函数
def mylemmatize(token):
    lmtzr = WordNetLemmatizer()
    lemmas = {}
    lemma = None
    if token not in lemmas:
         lemma = wordnet.morphy(token)

    if not lemma:
         lemma = token

    if lemma == token:
         lemma = lmtzr.lemmatize(token)

    lemmas[token] = lemma
    return lemmas[token]


def cleanmytext(text):
   words = map(mylemmatize, text.lower().split())
   return ' '.join(words)

# 把路由装饰器加到正确的请求处理函数glcoding上
@app.route("/glcoding", methods=['POST'])    
def glcoding():
    if request.method == 'POST':
         json_data = request.get_json()         
         data = pd.read_json(json_data, orient='index') 

         data['Invoice line item description'] = data['Invoice line item description'].apply(cleanmytext)

    return jsonify(data.to_dict(orient='index'))  # 将DataFrame转为字典后再返回,避免jsonify报错

if __name__ == '__main__':
     app.run(debug=True)  # 开启debug模式,方便开发时查看详细错误信息

修正后的API调用代码

import requests

BASE_URL = "http://127.0.0.1:5000"

# 直接传入字典,requests会自动将其转为JSON格式发送
data = {
    "0": {
        "Vendor Number": "166587",
        "Invoice line item description": "Petrol charges with electricity"
    }
}

response = requests.post(f"{BASE_URL}/glcoding", json=data)
print(response.json())

额外提示

  • 开发阶段建议开启Flask的debug=True,这样能看到更详细的错误栈,排查问题效率更高。
  • sklearn.externals.joblib已经被弃用,如果你使用的是较新版本的scikit-learn,建议单独安装joblib包后直接导入import joblib。

内容的提问来源于stack exchange,提问作者pavan subhash

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:15:12