【问题标题】:AttributeError: 'NotFound' object has no attribute 'encode'AttributeError:“未找到”对象没有属性“编码”
【发布时间】:2015-07-11 00:00:03
【问题描述】:

当用户使用包含 3 个以上子路径的 URL(例如“domain.com/var1/var2/var3/var4”)打开我的烧瓶应用程序时,它会引发以下错误:

Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1478, in    full_dispatch_request
response = self.make_response(rv)
File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1574, in make_response
rv = self.response_class(rv, headers=headers, status=status)
File "/usr/local/lib/python2.7/site-packages/werkzeug/wrappers.py", line 758, in __init__
self.status = status
File "/usr/local/lib/python2.7/site-packages/werkzeug/wrappers.py", line 862, in _set_status
self._status = to_native(value)
File "/usr/local/lib/python2.7/site-packages/werkzeug/_compat.py", line 111, in to_native
return x.encode(charset, errors)
AttributeError: 'NotFound' object has no attribute 'encode'

它适用于具有小于或等于 3 个子路径(如“domain.com/var1/var2/var3”)的 url,但我有具有 1、2 和 3 个子路径的 url 的路由。

如何让我的应用程序转到 404 Page Not Found 方法而不是抛出此错误?

谢谢!

编辑.. 这是我正在使用的路由方法的粘贴箱。 http://pastebin.com/kjYsqk9n

抱歉,我无法提供此问题的示例,这真的很奇怪,我不知道如何自己重现它。我的其他烧瓶应用程序工作正常,这个不行。如果有人需要澄清,请告诉我...感谢您的所有帮助!

【问题讨论】:

  • 我认为我们需要多看一些你的烧瓶代码才能确定地说出任何事情——你能发布相关的内容吗?您的视图代码的某些部分可能是?
  • 您好,谢谢您的回复。我把相关的烧瓶代码放在一个pastebin中:pastebin.com/kjYsqk9n
  • 谢谢!当您导航到其他不存在的页面时,404 是否正常发生?
  • @Walker,我不这么认为,例如,如果您访问 // 页面,在路由方法中我使用库来查看该国家和州是否存在,如果没有,我返回 page_not_found()。但它只返回 404,因为我告诉它。所以除了我创建的路由方法之外,404 不会发生并抛出上面的错误。
  • 我记得读过有关 apache 如何禁止 werkzeug 工作(或类似的东西)的文章,这就是为什么堆栈跟踪不显示在 apache 运行的服务器上,这可能是它不工作的原因吗? (对不起,如果我没有意义,只是回忆很久以前)

标签: python flask werkzeug


【解决方案1】:

找出它返回该错误的原因。事实证明,我在这一行的末尾传递了错误对象而不是“404”:

return render_template("error.html", usa=usa, canada=canada, breadcrumbs=breadcrumbs, error_code=e), 404

谢谢!

【讨论】:

    猜你喜欢
    • 2021-09-11
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    相关资源
    最近更新 更多