Skip to content

Pylint/pyreverse bug #10767

@SolitarySpiral

Description

@SolitarySpiral

Bug description

AttributeError: 'EmptyNode' object has no attribute 'name'. Did you mean: 'frame'?

Configuration

Command used

poetry run pyreverse -o png -p Octamillia -A -S app/

Pylint output

Format png is not supported natively. Pyreverse will try to generate it using Graphviz...
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "D:\my programs\Octamillia\.venv\Scripts\pyreverse.exe\__main__.py", line 7, in <module>
    sys.exit(run_pyreverse())
             ~~~~~~~~~~~~~^^
  File "d:\my programs\Octamillia\.venv\Lib\site-packages\pylint\__init__.py", line 56, in run_pyreverse
    sys.exit(PyreverseRun(argv or sys.argv[1:]).run())
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "d:\my programs\Octamillia\.venv\Lib\site-packages\pylint\pyreverse\main.py", line 360, in run
    diadefs = handler.get_diadefs(project, linker)
  File "d:\my programs\Octamillia\.venv\Lib\site-packages\pylint\pyreverse\diadefslib.py", line 292, in get_diadefs
    diagrams = DefaultDiadefGenerator(linker, self).visit(project)
  File "d:\my programs\Octamillia\.venv\Lib\site-packages\pylint\pyreverse\utils.py", line 159, in visit
    self.visit(local_node)
    ~~~~~~~~~~^^^^^^^^^^^^
  File "d:\my programs\Octamillia\.venv\Lib\site-packages\pylint\pyreverse\utils.py", line 159, in visit
    self.visit(local_node)
    ~~~~~~~~~~^^^^^^^^^^^^
  File "d:\my programs\Octamillia\.venv\Lib\site-packages\pylint\pyreverse\utils.py", line 156, in visit
    methods[0](node)
    ~~~~~~~~~~^^^^^^
  File "d:\my programs\Octamillia\.venv\Lib\site-packages\pylint\pyreverse\diadefslib.py", line 236, in visit_classdef
    self.extract_classes(node, anc_level, association_level)
    ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "d:\my programs\Octamillia\.venv\Lib\site-packages\pylint\pyreverse\diadefslib.py", line 184, in extract_classes
    self.extract_classes(node, anc_level, association_level - 1)
    ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "d:\my programs\Octamillia\.venv\Lib\site-packages\pylint\pyreverse\diadefslib.py", line 184, in extract_classes
    self.extract_classes(node, anc_level, association_level - 1)
    ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "d:\my programs\Octamillia\.venv\Lib\site-packages\pylint\pyreverse\diadefslib.py", line 184, in extract_classes
    self.extract_classes(node, anc_level, association_level - 1)
    ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "d:\my programs\Octamillia\.venv\Lib\site-packages\pylint\pyreverse\diadefslib.py", line 178, in extract_classes
    self.add_class(klass_node)
    ~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "d:\my programs\Octamillia\.venv\Lib\site-packages\pylint\pyreverse\diadefslib.py", line 142, in add_class
    self.linker.visit(node)
    ~~~~~~~~~~~~~~~~~^^^^^^
  File "d:\my programs\Octamillia\.venv\Lib\site-packages\pylint\pyreverse\utils.py", line 156, in visit
    methods[0](node)
    ~~~~~~~~~~^^^^^^
  File "d:\my programs\Octamillia\.venv\Lib\site-packages\pylint\pyreverse\inspector.py", line 188, in visit_classdef
    self.compositions_handler.handle(assignattr, node)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
  File "d:\my programs\Octamillia\.venv\Lib\site-packages\pylint\pyreverse\inspector.py", line 362, in handle
    super().handle(node, parent)
    ~~~~~~~~~~~~~~^^^^^^^^^^^^^^
  File "d:\my programs\Octamillia\.venv\Lib\site-packages\pylint\pyreverse\inspector.py", line 351, in handle
    self._next_handler.handle(node, parent)
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
  File "d:\my programs\Octamillia\.venv\Lib\site-packages\pylint\pyreverse\inspector.py", line 415, in handle
    super().handle(node, parent)
    ~~~~~~~~~~~~~~^^^^^^^^^^^^^^
  File "d:\my programs\Octamillia\.venv\Lib\site-packages\pylint\pyreverse\inspector.py", line 351, in handle
    self._next_handler.handle(node, parent)
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
  File "d:\my programs\Octamillia\.venv\Lib\site-packages\pylint\pyreverse\inspector.py", line 467, in handle
    name = node.attrname if isinstance(node, nodes.AssignAttr) else node.name
                                                                    ^^^^^^^^^
AttributeError: 'EmptyNode' object has no attribute 'name'. Did you mean: 'frame'?

Expected behavior

Expected recreated 2 files:
packages_Octamillia.png
classes_Octamillia.png

Pylint version

pylint: 4.0.4
astroid = ">=4.0.2,<=4.1.dev0"
python 3.13.3

OS / Environment

No response

Additional dependencies

colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""}
dill = [
    {version = ">=0.3.7", markers = "python_version >= \"3.12\""},
    {version = ">=0.3.6", markers = "python_version == \"3.11\""},
]
isort = ">=5,<5.13 || >5.13,<8"
mccabe = ">=0.6,<0.8"
platformdirs = ">=2.2"
tomlkit = ">=0.10.1"

[package.extras]
spelling = ["pyenchant (>=3.2,<4.0)"]
testutils = ["gitpython (>3)"]

Metadata

Metadata

Assignees

No one assigned

    Labels

    Needs triage 📥Just created, needs acknowledgment, triage, and proper labelling

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions