Python jsons 库与可选 None 值的 dataclass 序列化
我注意到我的Python代码打印了一些警告信息。这些警告是来自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)
MyClass2
只是我用来找出错误原因的一个类。
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
会。
我知道怎么停止这些警告信息:把类型提示从int|None
改成int
。
@dataclass
class MyClass2():
data: int # no `|None` here !
为什么这样做有效呢?
如果我把类型提示从int|None
改掉,序列化依然能正常进行,但警告就不会出现了。即使没有None
作为类型提示,序列化None
也能正常工作。
1 个回答
0
正如其他评论中提到的,这看起来确实是个错误。
作为一个解决办法,我建议把这个值设置为 Optional
。
from typing import Optional
class MyClass:
data: Optional[int] = None