如何解决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)
除了疯狂的hack-works之外,还有真正的解决方案吗? Windows/Linux 中行为不同的原因是什么?
更新:
@MacOS's comment below 让我提问..并回答:已安装的软件包之一对此负责。一个不必要的(因为它没有它就可以工作),它预装了 Python。我还需要确定是哪一个。希望尽快更新...
解决方法
使用flask json
from flask import jsonify,Flask,json
class ThingEncoder(json.JSONEncoder):
def default(self,obj):
# ...some logic...
return JSONEncoder.default(self,obj)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。