You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python的jsons库序列化含可选None值的数据类时出现警告的问题求助

使用Python的jsons库序列化含可选None值的数据类时出现警告的问题求助

大家好,我最近在用jsons库做序列化操作时碰到了一个奇怪的警告问题,想请社区的朋友们帮忙分析下原因。

我发现代码运行时会打印出jsons库抛出的警告,具体信息如下:

/home/user/project/.venv/lib/python3.11/site-packages/jsons/common_impl.py:43: UserWarning: Failed to dump attribute "None" of object of type "MyClass2". Reason: 'NoneType' object is not callable. Ignoring the attribute. Use suppress_warning(attribute-not-serialized) or suppress_warnings(True) to turn off this message.
warnings.warn(msg
, *args, **kwargs)

为了定位问题,我特意写了两个测试类:一个普通的MyClass,还有一个用@dataclass装饰的MyClass2——后者的data字段是int|None的可选类型。

以下是我的测试代码:

from dataclasses import dataclass
import jsons

class MyClass():
    def __init__(self) -> None:
        self.data = None

@dataclass
class MyClass2():
    data: int|None

my_class = MyClass()
my_class_2 = MyClass2(
    data=None,
)

# 序列化普通类实例,无警告输出
print(
    jsons.dumps(
        my_class,
        strip_privates=True,
    )
)

# 序列化数据类实例,触发警告
print(
    jsons.dumps(
        my_class_2,
        strip_privates=True,
    )
)

目前观察到的现象是:MyClass的实例序列化时完全正常,但MyClass2的实例在data设为None时,就会弹出上面那段警告。我有点搞不懂为什么会有这种差异,毕竟两个类的data都是None值。

想请教大家两个问题:

  • 为什么jsons库处理数据类的可选None字段时会触发这个警告?
  • 有没有办法在不使用警告抑制(比如suppress_warning方法)的前提下解决这个问题?

备注:内容来源于stack exchange,提问作者user2138149

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 11:19:29