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变量,存在潜在的运行风险。
修复步骤
- 清理冗余导包,删除重复导入和无效导入语句
- 调整参数获取逻辑,两个运算数分别取不同的参数key,新增非空和格式校验,用
request.values替代request.form同时兼容GET Query参数和POST Form参数 - 修正除法接口的路由为
/div,避免和加法路由冲突 - 重命名自定义sum函数避免和内置函数冲突,新增除数为0的异常校验
- 接口返回结构化数据,方便调用端识别成功/失败状态
修复后完整代码
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
相关产品推荐
相关产品推荐

