pyserde icon indicating copy to clipboard operation
pyserde copied to clipboard

SerdeError deserializing list of optional

Open davetapley opened this issue 1 year ago • 2 comments

Seen on 0.9.7 but then updated and still present on 0.10.2 (#315 is amazing BTW 👏🏻 👏🏻 👏🏻 ):

from dataclasses import dataclass
from serde.json import to_json, from_json

@dataclass
class Foo():
    stuff: list[int | None]

foo = to_json(Foo([1, 2, None]))
from_json(Foo, foo)
Traceback (most recent call last):
  File "/home/dave/.pyenv/versions/ng/lib/python3.10/site-packages/serde/de.py", line 398, in from_obj
    return deserializable_to_obj(c)
  File "/home/dave/.pyenv/versions/ng/lib/python3.10/site-packages/serde/de.py", line 380, in deserializable_to_obj
    res = serde_scope.funcs[func_name](cls, maybe_generic=maybe_generic, data=o, reuse_instances=reuse_instances)
  File "<string>", line 11, in from_dict
  File "<string>", line 11, in <listcomp>
AttributeError: 'int' object has no attribute 'get'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/dave/ng/pyserde_list_float_bug.py", line 9, in <module>
    from_json(Foo, foo)
  File "/home/dave/.pyenv/versions/ng/lib/python3.10/site-packages/serde/json.py", line 77, in from_json
    return from_dict(c, de.deserialize(s, **opts), reuse_instances=False)
  File "/home/dave/.pyenv/versions/ng/lib/python3.10/site-packages/serde/de.py", line 486, in from_dict
    return from_obj(cls, o, named=True, reuse_instances=reuse_instances)
  File "/home/dave/.pyenv/versions/ng/lib/python3.10/site-packages/serde/de.py", line 463, in from_obj
    raise SerdeError(e)
serde.compat.SerdeError: 'int' object has no attribute 'get'

davetapley avatar Mar 23 '23 22:03 davetapley