Flask AttributeError: module 'flask.json' has no attribute 'JSONEncoder'

回答 5 浏览 2930 2023-04-26

我的flask应用在升级前一直在工作。当出现忘记重置密码的情况时,我在发送邮件方面遇到了麻烦。为了解决这个问题,我最近为我的flask应用升级了一些模块。我升级了当前版本的模块是:

  • email-validator==2.0.0.post2
  • Flask==2.3.1
  • itsdangerous==2.1.2

我现在得到的回溯错误是:

Traceback (most recent call last):
File "C:\Users\my_folder\sales\app.py", line 1, in <module>
from product import app
File "C:\Users\my_folder\sales\product\__init__.py", line 56, in <module>
from product.agents.views import agents_bp
File "C:\Users\my_folder\sales\product\agents\views.py", line 7, in <module>
from product.agents.forms import RegistrationForm, LoginForm, UpdateAccountForm, ResetPasswordForm, RequestResetForm
File "C:\Users\my_folder\sales\product\agents\forms.py", line 1, in <module>
from flask_wtf import FlaskForm
File "C:\Users\my_folder\flask_env\lib\site-packages\flask_wtf\__init__.py", line 4, in <module>
from .recaptcha import Recaptcha
File "C:\Users\my_folder\flask_env\lib\site-packages\flask_wtf\recaptcha\__init__.py", line 1, in <module>
from .fields import RecaptchaField
File "C:\Users\my_folder\flask_env\lib\site-packages\flask_wtf\recaptcha\fields.py", line 3, in <module>
from . import widgets
File "C:\Users\my_folder\flask_env\lib\site-packages\flask_wtf\recaptcha\widgets.py", line 6, in <module>
JSONEncoder = json.JSONEncoder
AttributeError: module 'flask.json' has no attribute 'JSONEncoder'

我如何去解决这个问题呢?

Shane S 提问于2023-04-26
你可能有一个名为json.py的模块。避免将你的文件命名为与标准库或其他包的库相同的名字mousetail 2023-04-26
@mousetail 我看到的唯一json.py文件是在in环境中。我应该重命名这个文件吗? flask_env\Lib/site-packages\pip_vendor/rich/json.py或者flask_env\Lib/site-packages/sqlalchemy/dialects/mssql/json.pyShane S 2023-04-26
这些应该不在你的Python路径中,所以不应该直接导入。mousetail 2023-04-26
@mousetail 我刚刚意识到,我漏掉了跟踪回溯的最后一行。Shane S 2023-04-26
5 个回答
#1楼
得票数 5

我发现的解决方案是卸载Flask,然后安装一个旧版本。

pip uninstall Flask  
pip install Flask==2.2.3 

这个解决方案的问题是,在忘记重置密码的POST上仍然得到一个错误。 希望以后有人能找到一个新的更好的解决方案。

Shane S 提问于2023-04-27
Shane S 修改于2023-04-27
#2楼
得票数 3

这些属性已经从flask 2.3.0版本中移除,请看此发布说明:https://flask.palletsprojects.com/en/2.3.x/changes/#version-2-3-0

Guy Cohen Zedek 提问于2023-05-02
谢谢你的信息,有什么办法能解决这个问题吗?do-it-yourself 2023-05-02
谢谢你的链接。我引用其中的部分内容:"json_encoder and json_decoder attributes on app and blueprint, and the corresponding json.JSONEncoder and JSONDecoder classes, are removed"。这样看来,尽管json.JSONncoder被删除了,但在flask模块代码中仍然被引用。Shane S 2023-05-03
#3楼 已采纳
得票数 2

至少从3.2开始,Python就有了一个内置的JSONEncoder,使得Flask的版本变得多余了。所以删除它是合理的。

如果这是你控制的一个模块,你可以把你的这行JSONEncoder = json.JSONEncoder替换成

from json import JSONEncoder

由于你没有控制这个库,你应该注意是哪个库在试图包含它,在你的例子中是flask_wtf。当你检查PyPi的那个库时,你会看到有几个最近的版本,建议你首先应该尝试更新Flask-TF上的那个版本。

Kacey Saff 提问于2023-05-24
#4楼
得票数 1

我今天也有这个问题。对我来说,更新我的connexion版本解决了这个问题。

ElenaJung 提问于2023-04-26
谢谢你的这个主意。这似乎不是我的解决方案,因为我甚至没有这个python包。Shane S 2023-04-27
#5楼
得票数 1

错误信息中的一行具体内容提供了线索:

from flask_wtf import FlaskForm

将Flask-WTF软件包升级到最新版本,为我解决了这一问题:

Flask-WTF~=1.1.1
Jipstuh 提问于2023-05-24
标签