首页 > 解决方案 > KeyError: 'babel' - 与 __init__.py 相关 - 未明确使用 Babel

问题描述

几个小时以来,我一直遇到同样的错误,无论我做了什么代码更改,而且它引用了 Babel,这是我没有专门调用或使用的依赖项,尽管我认为它被调用是有原因的。它来自一个应该用来flask-table动态呈现一些 HTML 以制作表格的函数。

2018-06-08 21:30:12,121: [2018-06-08 21:30:12,114] ERROR in app: Exception on /checkin_home/ [POST]
2018-06-08 21:30:12,121: Traceback (most recent call last):
2018-06-08 21:30:12,121:   File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1982, in wsgi_app
2018-06-08 21:30:12,121:     response = self.full_dispatch_request()
2018-06-08 21:30:12,121:   File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1614, in full_dispatch_request
2018-06-08 21:30:12,122:     rv = self.handle_user_exception(e)
2018-06-08 21:30:12,122:   File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1517, in handle_user_exception
2018-06-08 21:30:12,122:     reraise(exc_type, exc_value, tb)
2018-06-08 21:30:12,122:   File "/usr/local/lib/python3.6/dist-packages/flask/_compat.py", line 33, in reraise
2018-06-08 21:30:12,122:     raise value
2018-06-08 21:30:12,122:   File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1612, in full_dispatch_request
2018-06-08 21:30:12,122:     rv = self.dispatch_request()
2018-06-08 21:30:12,122:   File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1598, in dispatch_request
2018-06-08 21:30:12,123:     return self.view_functions[rule.endpoint](**req.view_args)
2018-06-08 21:30:12,123:   File "/my/working_dir/path/mysite/project/mci.py", line 49, in checkin_home_post
2018-06-08 21:30:12,123:     return checkin_search_module.checkin_search(event_guid=event_guid, input_string=input_string)
2018-06-08 21:30:12,123:   File "/my/working_dir/path/mysite/project/checkin_search_module.py", line 3, in checkin_search
2018-06-08 21:30:12,123:     from flask_table import Table, Col
2018-06-08 21:30:12,123:   File "/my/working_dir/path/.local/lib/python3.6/site-packages/flask_table/__init__.py", line 1, in <module>
2018-06-08 21:30:12,123:     from .table import Table, create_table
2018-06-08 21:30:12,123:   File "/my/working_dir/path/.local/lib/python3.6/site-packages/flask_table/table.py", line 8, in <module>
2018-06-08 21:30:12,124:     from .columns import Col
2018-06-08 21:30:12,124:   File "/my/working_dir/path/.local/lib/python3.6/site-packages/flask_table/columns.py", line 161, in <module>
2018-06-08 21:30:12,124:     class BoolCol(OptCol):
2018-06-08 21:30:12,124:   File "/my/working_dir/path/.local/lib/python3.6/site-packages/flask_table/columns.py", line 166, in BoolCol
2018-06-08 21:30:12,124:     yes_display = _('Yes')
2018-06-08 21:30:12,124:   File "/usr/local/lib/python3.6/dist-packages/flask_babel/__init__.py", line 539, in gettext
2018-06-08 21:30:12,124:     t = get_translations()
2018-06-08 21:30:12,124:   File "/usr/local/lib/python3.6/dist-packages/flask_babel/__init__.py", line 214, in get_translations
2018-06-08 21:30:12,124:     babel = current_app.extensions['babel']
2018-06-08 21:30:12,125: KeyError: 'babel'

在基本层面上,错误似乎是:它正在寻找一个密钥babelcurrent_app.extensions没有找到它。

我尝试flask-table通过pip(它有 Babel 作为依赖项)重新安装,它是最新的,我也尝试Babel直接重新安装,以防万一,它也是最新的。这是 Python 3.6。

在该错误的第 15-25 行中,还有一些更具体的引用args和特定于我的代码的导入,但是如果我在控制台中运行相同的代码,那很好,可以按预期工作。只是当我把它放在 Flask 中时它不起作用。其余的应用程序和路由正常运行,只有当POSTcheckin_home收到上面的 500 错误时。

从我能够做的研究来看,它似乎与__init__.py给定目录中的“应用程序上下文”处理方式有关,但老实说,我真的不知道这意味着什么或如何解决它. 我所知道的是它是模块中的一个文件来告诉python它们是模块。我有另一个 Flask 应用程序,它可以在相同的环境中呈现类似的 HTML 表,并且可以正常工作。

我可以发布代码的近似值,但这需要对敏感信息进行大量混淆,所以在我这样做之前,我想知道这是否可能是我没有看到的简单事情。

标签: pythonflaskpython-babelflask-babel

解决方案


这个问题现在已经有将近两年的历史了,但是当我搜索错误时,我遇到了这个问题并登陆了这个页面。就我而言,我有一个 tables.py 文件

from flask_table import Table, Col, LinkCol

当我创建应用程序时效果很好,但随着它的增长,我不得不移动东西。那时它变成了一个大型的 Flask 应用程序,我决定重组一切以遵循最佳实践。我遵循了一些构建它的建议,其中大部分来自https://exploreflask.com/en/latest/index.html。因此,我使用init .py 文件来创建应用程序工厂。为了纠正我收到的错误,我只是在 init 文件中使用了相同的 import 语句。看来有必要在这两个地方都有它。我不确定这是否是正确的答案,但没有发布其他答案,这对我有用。如果有更多经验的人有不同的看法,请礼貌地纠正我。


推荐阅读