python - JSONEncoder 仅在 Linux 中崩溃,原因是在 Windows 中不存在“意外的关键字参数“编码””
问题描述
在 Windows 中运行下面的代码可以完美运行,而在 Linux(Ubuntu)中它在ThingEncoder.__init__
调用super().__init__(*args, **kwargs)
. 这次崩溃的原因是kwargs
.
在 Windows 中,kwargs
包含 8 个字段:
在 Linux 中,它是 18:
抛出的错误是:
__init__() got an unexpected keyword argument 'encoding'
[2021-01-04 12:04:31,233] ERROR in app: Exception on /things [GET]
Traceback (most recent call last):
File "/home/me/.local/lib/python3.8/site-packages/flask/app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "/home/me/.local/lib/python3.8/site-packages/flask/app.py", line 1953, in full_dispatch_request
return self.finalize_request(rv)
File "/home/me/.local/lib/python3.8/site-packages/flask/app.py", line 1968, in finalize_request
response = self.make_response(rv)
File "/home/me/.local/lib/python3.8/site-packages/flask/app.py", line 2097, in make_response
raise TypeError(
TypeError: The view function did not return a valid response. The function either returned None or ended without a return statement.
127.0.0.1 - - [04/Jan/2021 12:04:31] "GET /things HTTP/1.1" 500 -
(encoding
仅在 Linux 上运行时存在)。
这是代码:
from flask import jsonify, Flask
from json import JSONEncoder
class ThingEncoder(JSONEncoder):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) # here is the crash!!
print("test")
def default(self, obj):
# ...some logic...
return JSONEncoder.default(self, obj)
app = Flask(__name__)
app.json_encoder = ThingEncoder
@app.route('/things', methods=['GET'])
def get_things():
try:
jsonify(id=str(7), pt="ZR")
print("good")
except Exception as e:
print(e)
if __name__ == '__main__':
app.run(host="0.0.0.0", port=5432)
除了疯狂的黑客作品,还有真正的解决方案吗?Windows/Linux 中不同行为的原因是什么?
更新:
@MacOS 下面的评论让我质疑.. 并回答:已安装的软件包之一对此负责。一个非必要的(因为它没有它也可以工作),它预装了 Python。我仍然需要确定是哪一个。希望快点更新。。。
解决方案
使用烧瓶 json
from flask import jsonify, Flask, json
class ThingEncoder(json.JSONEncoder):
def default(self, obj):
# ...some logic...
return JSONEncoder.default(self, obj)
推荐阅读
- google-apps-script - 发送电子邮件 onEdit 并将行数据嵌入到 Google 表格中的电子邮件中
- tensorflow - 运行此 TensorFlow 代码后的 Google Colab:“您的会话因未知原因而崩溃。” “遇到非法内存访问”
- javascript - 为什么我的查询不等待就无法工作?如何修复“query.orderBy”不是函数?
- java - “抛出异常”和“抛出 IOException”有什么区别
- javascript - rollup.js_Bundle 自动更新
- c++ - 如何在cpp中将%p转换为%d?
- python - 如何使用 OpenCV 在空白图像上准确地绘制它们在源图像中的形状?
- javascript - 真正的内存问题 - 云函数
- java - Android - 从服务器解析部分 JSON 文件
- python - 当有多个文件从其他文件导入类时,如何在 VS 代码中调试 python 代码?(有依赖时调试)