Python Flask:TypeError: unsupported operand type(s) for -: ‘str‘ and ‘int‘

背景

项目中常见的分页功能,代码如下:

c 复制代码
# 收藏列表
@blog_base_blueprint.route('/resource_like_list/<int:user_id>', methods=['POST'])
def getResourceLikeList(user_id):

    page_size = request.form.get('page_size', default=2)

    page_num = request.form.get('page_num', default=1)

    offset = (page_num - 1) * page_size

    print(offset)
    print(page_num)
    print(page_size)

    logs = models.ResourceLikeLog.query.filter_by(user_id=user_id).filter_by(delete_flag=0).order_by(models.ResourceLikeLog.id.desc()).offset(
        offset).limit(page_size)

    return jsonify({
        'code': 1,
        'msg': '成功',
        'data': [log.to_format() for log in logs]
    })

项目启动时可以使用,但是我在postman中传了page_num的参数,然后就报异常TypeError: unsupported operand type(s) for -: 'str' and 'int';

根据异常信息,是类型的的问题,需要将str转为int,这里还是很好处理的,在接受参数的时候,处理一下就可以喽。

request.form.get()

点到源码,

c 复制代码
    def get(self, key, default=None, type=None):
        """Return the default value if the requested data doesn't exist.
        If `type` is provided and is a callable it should convert the value,
        return it or raise a :exc:`ValueError` if that is not possible.  In
        this case the function will return the default as if the value was not

        :param key: The key to be looked up.
        :param default: The default value to be returned if the key can't
                        be looked up.  If not further specified `None` is
                        returned.
        :param type: A callable that is used to cast the value in the
                     :class:`MultiDict`.  If a :exc:`ValueError` is raised
                     by this callable the default value is returned.
        """
        try:
            rv = self[key]
        except KeyError:
            return default
        if type is not None:
            try:
                rv = type(rv)
            except ValueError:
                rv = default
        return rv

能看到这个方法的参数:有默认值,还有一个参数类型的参数,用来强制转换参数类型,调整代码为:

c 复制代码
    page_size = request.form.get('page_size', default=2, type=int)

    page_num = request.form.get('page_num', default=1, type=int)
相关推荐
艾莉丝努力练剑2 小时前
【C++:异常】C++ 异常处理完全指南:从理论到实践,深入理解栈展开与最佳实践
java·开发语言·c++·安全·c++11
岁忧8 小时前
GoLang五种字符串拼接方式详解
开发语言·爬虫·golang
tyatyatya8 小时前
MATLAB基础数据类型教程:数值型/字符型/逻辑型/结构体/元胞数组全解析
开发语言·matlab
程序员小远8 小时前
软件测试之单元测试详解
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
心无旁骛~9 小时前
python多进程和多线程问题
开发语言·python
星云数灵9 小时前
使用Anaconda管理Python环境:安装与验证Pandas、NumPy、Matplotlib
开发语言·python·数据分析·pandas·教程·环境配置·anaconda
kaikaile19959 小时前
基于遗传算法的车辆路径问题(VRP)解决方案MATLAB实现
开发语言·人工智能·matlab
计算机毕设匠心工作室9 小时前
【python大数据毕设实战】青少年抑郁症风险数据分析可视化系统、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习
后端·python
计算机毕设小月哥9 小时前
【Hadoop+Spark+python毕设】智能制造生产效能分析与可视化系统、计算机毕业设计、包括数据爬取、Spark、数据分析、数据可视化、Hadoop
后端·python·mysql
四问四不知9 小时前
Rust语言进阶(结构体)
开发语言·后端·rust