使用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
相关产品推荐
相关产品推荐

