Skip to content

Nested attribute lookup for improved error messages executes property code #145413

@Hiumee

Description

@Hiumee

Bug report

Bug description:

The new error messages for nested attributes will execute descriptors/property code

Modified example from the change log. Gave the property a side effect (print)

from dataclasses import dataclass
from math import pi

@dataclass
class Circle:
   radius: float
   @property
   def area(self) -> float:
      print("Property 'area' accessed")
      return pi * self.radius**2

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

circle = Circle(radius=4.0)
container = Container(circle)
print(container.area)

Output

Property 'area' accessed
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
    print(container.area)
          ^^^^^^^^^^^^^^
AttributeError: 'Container' object has no attribute 'area'. Did you mean '.inner.area' instead of '.area'?

Expected would be to not execute the code. This does not happen when the Container class has a property suggested

PR incoming

CPython versions tested on:

CPython main branch

Operating systems tested on:

Windows

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    stdlibStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or error

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions