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

Postman测试Flask接口报TypeError:int()参数不能为NoneType问题求助

报错根因

报错TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'的核心触发逻辑是int()函数接收到的入参为None,具体问题点如下:

  • 参数获取逻辑错误:所有接口获取两个运算数时都调用了request.form.get('number'),用了同一个参数key。若Postman请求未传number参数,request.form.get()默认返回None,直接转int就触发该报错;就算传了number参数,两个运算数取到的也是同一个值,运算逻辑完全错误。
  • 传参方式不匹配:如果Postman用了非Form格式传参(比如raw JSON、GET Query参数),request.form无法读取对应参数,也会返回None。
  • 路由重复定义:除法接口的路由也配置为/sum,Flask中同路由的后定义会覆盖先定义的逻辑,原加法接口直接失效。
  • 命名冲突:自定义的sum函数和Python内置的sum函数重名,容易引发不可预知的运行错误。
  • 冗余导包:重复导入Flask、引入了未使用的app变量,存在潜在的运行风险。
修复步骤
  1. 清理冗余导包,删除重复导入和无效导入语句
  2. 调整参数获取逻辑,两个运算数分别取不同的参数key,新增非空和格式校验,用request.values替代request.form同时兼容GET Query参数和POST Form参数
  3. 修正除法接口的路由为/div,避免和加法路由冲突
  4. 重命名自定义sum函数避免和内置函数冲突,新增除数为0的异常校验
  5. 接口返回结构化数据,方便调用端识别成功/失败状态
修复后完整代码
from flask import Flask, request, jsonify

# 重命名避免和Python内置sum函数冲突
def sum_op(number1,number2):
    return number1 + number2

def sub(number1,number2):
    return number1 - number2

def mul(number1,number2):
    return number1 * number2

def div(number1,number2):
    return number1 / number2

app = Flask(__name__)

@app.route('/sum', methods=['POST','GET'])
def sum_handle():
    number1 = request.values.get('number1')
    number2 = request.values.get('number2')
    # 非空校验
    if not number1 or not number2:
        return jsonify({"code": 400, "msg": "参数number1、number2不能为空"}), 400
    # 格式校验
    try:
        number1 = int(number1)
        number2 = int(number2)
    except ValueError:
        return jsonify({"code": 400, "msg": "参数必须为合法整数"}), 400
    result = sum_op(number1, number2)
    return jsonify({"code": 200, "result": result})

@app.route('/sub', methods=['POST','GET'])
def sub_handle():
    number1 = request.values.get('number1')
    number2 = request.values.get('number2')
    if not number1 or not number2:
        return jsonify({"code": 400, "msg": "参数number1、number2不能为空"}), 400
    try:
        number1 = int(number1)
        number2 = int(number2)
    except ValueError:
        return jsonify({"code": 400, "msg": "参数必须为合法整数"}), 400
    result = sub(number1, number2)
    return jsonify({"code": 200, "result": result})

@app.route('/mul', methods=['POST','GET'])
def mul_handle():
    number1 = request.values.get('number1')
    number2 = request.values.get('number2')
    if not number1 or not number2:
        return jsonify({"code": 400, "msg": "参数number1、number2不能为空"}), 400
    try:
        number1 = int(number1)
        number2 = int(number2)
    except ValueError:
        return jsonify({"code": 400, "msg": "参数必须为合法整数"}), 400
    result = mul(number1, number2)
    return jsonify({"code": 200, "result": result})

@app.route('/div', methods=['POST','GET'])
def div_handle():
    number1 = request.values.get('number1')
    number2 = request.values.get('number2')
    if not number1 or not number2:
        return jsonify({"code": 400, "msg": "参数number1、number2不能为空"}), 400
    try:
        number1 = int(number1)
        number2 = int(number2)
    except ValueError:
        return jsonify({"code": 400, "msg": "参数必须为合法整数"}), 400
    # 除数为0校验
    if number2 == 0:
        return jsonify({"code": 400, "msg": "除数不能为0"}), 400
    result = div(number1, number2)
    return jsonify({"code": 200, "result": result})

if __name__ == '__main__':
    app.run(debug=True)
Postman测试说明
  • POST请求:选择x-www-form-urlencoded或者form-data格式,在Body里填写key为number1、number2的整数值即可测试
  • GET请求:直接在URL后拼接参数,比如http://127.0.0.1:5000/sum?number1=10&number2=20即可测试

内容的提问来源于stack exchange,提问作者RITIK KUMAR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:27:03