Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Side effect of FrozenJSON.__getattr__ not raising KeyError #46

Open
hayemj opened this issue Jul 17, 2024 · 0 comments
Open

Side effect of FrozenJSON.__getattr__ not raising KeyError #46

hayemj opened this issue Jul 17, 2024 · 0 comments

Comments

@hayemj
Copy link

hayemj commented Jul 17, 2024

Hi Luciano,

In chapter 22 you mention that FrozenJSON.__getattr__() raising a KeyError is "not to confusing". However, today I discovered a side effect from this that is confusing: copy.copy(FrozenJSON({'name': 'Jim Bo', 'class': 1982})) raises a RecursionError.

Indeed the documentation states that an AttributeError should be raised (https://docs.python.org/3/reference/datamodel.html#object.__getattr__) and apparently this is relied upon in the stdlib. In the copy implementation a new instance of FrozenJSON is generated without the initializer being called. Then, when looking for some optional dunder methods (that are not found) the copy implementation triggers a __getattr__ call with self.__data not yet existing, triggering the recursion.

What I appreciate in your book is that you are always very precise about all types of unexpected side effects, so maybe you could consider spending some text on this in a future update.

Best regards, Michiel

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant