‘app.json_encoder‘ is deprecated and will be removed in Flask 2.3. 报错解决

出现的问题

 

最近在做一个项目,后端用的flask,数据通过return jsonify({})传到前端。做的时候发现前端接收到的数据格式不对,如下。

期望出现的格式:

不完美的解决方案

from flask import Flask
from flask.json import JSONEncoder

class MyJSONEncoder(JSONEncoder):
    def default(self, o):
        if isinstance(o, date):
            return o.isoformat()

        return super().default(o)


app = Flask(__name__)
app.json_encoder = MyJSONEncoder

前端确实能正确显示了,但是会出现以下warning:

'JSONEncoder' is deprecated and will be removed in Flask 2.3. Use 'Flask.json' to provide an alternate JSON implementation instead.

 最终解决方案

在app.py中加入以下代码

from datetime import date, datetime
from flask.json.provider import DefaultJSONProvider


class UpdatedJSONProvider(DefaultJSONProvider):
    def default(self, o):
        if isinstance(o, date) or isinstance(o, datetime):
            return o.isoformat(' ')
        return super().default(o)

app = Flask(__name__)
app.json = UpdatedJSONProvider(app)

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 警告:在xgbclassifier中使用标签编码器已经过时,并将在未来的版本中被删除。为了消除这个警告,请执行以下操作:1)在构建xgbclassifier对象时传递选项use_label_encoder=false;2)将标签(y)编码为从开始的整数,即、1、2、...,[num_class-1]。警告:标签编码器已过时,请注意。 ### 回答2: 这是一条关于XGBoost库中使用Label Encoder时的警告信息。这个警告信息告诉我们,使用Label Encoder在未来的版本中将被删除,因此我们需要做出相应的调整。为了消除这个警告,我们需要执行以下两个步骤: 第一步,我们需要在构造XGBClassifier对象时,传递选项use_label_encoder=false,这将告诉XGBoost不要使用Label Encoder。 第二步,我们需要将标签(y)编码为从0开始的整数,例如0、1、2等。这是因为XGBoost要求标签必须是整数,而且从0开始依次增加。如果你的标签不是整数,那么你可以使用sklearn中的LabelEncoder或OneHotEncoder来把标签转化为整数类型。 在以上两个步骤都执行完毕之后,你运行你的程序时,就不会收到这个警告信息了。这个警告信息的目的是提醒我们及时对程序进行更改,以便在未来的版本中继续使用XGBoost库。通过这个警告信息,我们了解到了不同版本中的变化,并对我们的程序做出了相应的改变。 ### 回答3: 这个警告是因为在XGBoost库的XGBClassifier中使用的标签编码器(Label Encoder)被认为是过时的并且会在将来的版本中被移除。为了处理这个警告,我们需要将构造XGBClassifier的时候传入参数use_label_encoder设置为false,同时将标签(y)编码为从0开始的整数,例如0,1,2,……,[num_class-1]。 标签编码器是一种非常常见的数据预处理技术,用于将非数字型数据转化为数字型以便于算法处理。在XGBClassifier中使用标签编码器是非常常见的,因为XGBClassifier预期的标签是从0开始的整数。但是由于标签编码器在处理标签的时候并没有考虑到它们的顺序,因此可能会产生一些问题。因此,在未来的XGBoost版本中考虑去除这个功能,建议用户使用合适的方法替代标签编码器。 为了解决这个问题,我们需要将标签(y)从非数字类型转换为数字类型,并确保它们是从0开始的整数。这可以通过使用sklearn.preprocessing库中的LabelEncoder实现。另外,我们需要将use_label_encoder设置为false,以确保XGBClassifier不会使用标签编码器进行处理。 总之,为了避免使用标签编码器,可以按照以下步骤操作: 1.使用sklearn.preprocessing库中的LabelEncoder将标签编码为从0开始的整数类型。 2.在构造XGBClassifier对象的时候将use_label_encoder设置为false。 这样可以保证我们的代码在将来的XGBoost版本中也能够正常运行,而不受标签编码器的问题所影响。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值