flask中路由函数定义中遇到的问题

2023-11-07

flask的路由功能很强大,可以很清晰明了的定义出需要的路由函数,但是由于python语言的弱类型设计引来了一些不易发现的问题

@app.route('/task/get', methods=['GET'])
def get_tasks():
    """
    get the task list
    :return:
    """
    try:
        key = request.args.get("key")
        tasks = services.retrieve_tasks(key)
        return tasks, 200
    except Exception as e:
        print(e)
        return "get task failed", 500

如上,定义了如上一个route,用来获取指定key所对应的task列表,功能很简单,但是在调试过程中,报了以下错误

  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/flask/app.py", line 1630, in finalize_request
    response = self.make_response(rv)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/flask/app.py", line 1740, in make_response
    rv = self.response_class.force_type(rv, request.environ)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/werkzeug/wrappers.py", line 921, in force_type
    response = BaseResponse(*_run_wsgi_app(response, environ))
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/werkzeug/wrappers.py", line 59, in _run_wsgi_app
    return _run_wsgi_app(*args)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/werkzeug/test.py", line 923, in run_wsgi_app
    app_rv = app(environ, start_response)
TypeError: 'int' object is not callable

这个错误的意思是用了一个int类型的对象去做函数调用,一开始以为是传进去的参数key必须要转义成int导致后面获取的时候错误造成的,但是看堆栈信息上又没有自己代码的信息,所以修改过后错误仍然存在。于是分析是不是flask本身的问题,从报错的那行代码“app_rv = app(environ, start_response)”逐步调试分析,这里的app在报错的时候等于1,而这个1是需要返回的任务编号,所以判断router函数的返回必须是一个str,用str()强制类型转换返回值后问题解决。

这类问题其实很常见,就是我们在调用python的一些库函数的时候,对这个函数的入参、返回值具体的约束无法得到清晰明了的了解,不像java,从函数定义上就可以知道所有的约束,即便看源码中的注释也无法完全了解。

另外对于router函数名称的定义,个人觉得是一个重复的操作,因为代码中已经给出了router的全局定义,又何必再命名一个unique的函数名呢。

 

转载于:https://www.cnblogs.com/rucnevermore/p/8575432.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

flask中路由函数定义中遇到的问题 的相关文章

随机推荐