Skip to content

Add back typo detection to sub-attribute access #137967

@pablogsal

Description

@pablogsal

Bug report

Bug description:

I remember we used to have this when all the typo-detection machinery was in the C code but somehow that has not survived the transition to the new traceback machinery (or perhaps I am misremembering but I recall adding this originally when we added the first round). Either way this PR ensures that we have a nice error message when the typo is across attribute access:

from dataclasses import dataclass
from math import pi
from types import SimpleNamespace
from typing import Any, Dict


@dataclass
class Circle:
    radius: float

    @property
    def area(self) -> float:
        return pi * self.radius**2

    @property
    def perimeter(self) -> float:
        return 2 * pi * self.radius


@dataclass
class Square:
    side: float

    @property
    def area(self) -> float:
        return self.side**2

    @property
    def perimeter(self) -> float:
        return 4 * self.side


class Container:
    def __init__(self, inner: Any) -> None:
        self.inner = inner


if __name__ == "__main__":
    square = Square(side=4)
    container = Container(square)

    print(container.area)

Should print:

Traceback (most recent call last):
  File "/home/pablogsal/github/python/main/lel.py", line 42, in <module>
    print(container.area)
          ^^^^^^^^^^^^^^
AttributeError: 'Container' object has no attribute 'area'. Did you mean: 'inner.area'?

CPython versions tested on:

CPython main branch

Operating systems tested on:

No response

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    stdlibPython modules in the Lib dirtopic-replRelated to the interactive shelltype-bugAn unexpected behavior, bug, or errortype-featureA feature request or enhancement

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions