启动Python Quart应用集成Quart-Motor时遇JSONEncoder属性错误
解决Quart-Motor集成时的AttributeError: module 'quart.json' has no attribute 'JSONEncoder'
问题原因
Quart在0.19及以上版本重构了JSON处理逻辑,移除了quart.json.JSONEncoder这个导出项,但当前版本的Quart-Motor仍在依赖这个旧API,导致启动时触发属性找不到的错误。
解决方法
方案一:降级Quart到兼容版本
安装Quart 0.18.3(该版本保留了quart.json.JSONEncoder,与Quart-Motor兼容):
- 使用Poetry的话,在
pyproject.toml中修改依赖:
quart = "==0.18.3"
然后执行:
poetry update
- 使用pip直接安装:
pip install quart==0.18.3 --force-reinstall
方案二:修改Quart-Motor源码适配新版Quart
如果不想降级Quart,可以手动修改Quart-Motor的代码:
- 找到Quart-Motor的安装目录(通过
pip show quart-motor查看Location字段) - 打开目录下的
motor.py文件,找到所有引用from quart.json import JSONEncoder或quart.json.JSONEncoder的位置 - 将其替换为标准库的JSONEncoder:
from json import JSONEncoder
或者适配Quart新版的JSONProvider:
from quart.json.provider import DefaultJSONProvider JSONEncoder = DefaultJSONProvider.encoder_class
- 保存文件后重新启动应用即可。
内容的提问来源于stack exchange,提问作者sebajou
相关产品推荐
相关产品推荐

