【问题标题】:Flask : TypeError: 'str' object is not callable烧瓶:TypeError:'str'对象不可调用
【发布时间】:2013-04-30 16:38:39
【问题描述】:

我有一个生成的烧瓶应用程序,它给了我这个回溯:

Traceback (most recent call last):
  File "/home/.virtualenvs/j/lib/python2.7/site-packages/flask/app.py", line 1701, in __call__
    return self.wsgi_app(environ, start_response)
  File "/home/.virtualenvs/j/lib/python2.7/site-packages/flask/app.py", line 1689, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/home/.virtualenvs/j/lib/python2.7/site-packages/flask/app.py", line 1687, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/.virtualenvs/j/lib/python2.7/site-packages/flask/app.py", line 1360, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/.virtualenvs/j/lib/python2.7/site-packages/flask/app.py", line 1358, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/.virtualenvs/j/lib/python2.7/site-packages/flask/app.py", line 1344, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
TypeError: 'str' object is not callable

但目前我无法确定造成这种情况的原因或原因。该应用程序启动并似乎正在运行,但每当我尝试访问路线时,都会在此回溯中阻塞。

这是什么?是什么原因造成的?我不知道什么对象是 str 以及为什么它不可调用。这是我第一次看到这样的东西。

【问题讨论】:

  • 您能否显示注册为您尝试访问的路由的处理程序的函数?

标签: python flask


【解决方案1】:

当然,这是其中之一,可以有多个不同的修复(无需查看所有原始源代码)。

我在 HTML 模板中遇到了与您相同的错误:

TypeError: 'str' object is not callable

我的解决方法是删除我(愚蠢的)获取原始请求变量的尝试:

my_form = request.form

然后手动分配它们:

my_form.blah = request.form['blah']

有趣的是,my_form = request.form 执行时没有出现问题,它只是在 HTML 模板中显示为错误。

【讨论】:

    【解决方案2】:

    这意味着self.view_functions[rule.endpoint] 是一个字符串,而不是一个函数,因此不能被调用(使用(...) 运算符)。也就是说,如果没有您的代码,很难说出问题所在:Flask 期望调用一个函数并获得一个字符串。你使用了@app.route 装饰器吗?

    尝试打印self.view_functions[rule.endpoint] 的值,看看结果如何。

    【讨论】:

    • 路由是在路由装饰器之外构建的,来自蓝图中的不同配置,该配置在我构建的应用程序工厂中构建和注册......当制作第二个应用程序时,我做了路由方法表示法像字符串一样不假思索。
    猜你喜欢
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    相关资源
    最近更新 更多