Re:Pyrefly
by NeutralForest on Tuesday April 29, 2025 @03:43PM
(#43837136)
For maximum safety, I would write:
if bar.get("baz", {}).get("qux") is not None:
...
Re:Pyrefly
by nikisweeting on Tuesday April 29, 2025 @08:06PM
(#43839584)
any more than 2 levels deep of this pattern and I reach for python-benedict
Re:Pyrefly
by NeutralForest on Wednesday April 30, 2025 @02:32AM
(#43841887)
Nice, I didn't know about that lib! Usually if I have very nested content I recursively parse it and I'll have some business logic in the function to handle cases here and there. Or I'll have a validation library like Pydantic.
Idiomatic Python favours EAFP (Easier to Ask Forgiveness than Permission) over LBYL (Look Before You Leap), so you might write something like this when using TypedDicts:
Pyright warns you about this and pushes you to write this: They identified this as a bug and fixed it, then changed course and decided to reinstate the behaviour. So if you want to write idiomatic Python, you need to disable typechecking TypedDicts.— https://github.com/microsoft/pyright/issues/1739
Now if this were a linter then I would understand. But a type checker should not be opinionated to the point of pushing people not to use idiomatic Python.