Skip to content

v2.13.x regression: Crash when inspecting PyQt5.QtWidgets due to RuntimeError during hasattr #1958

@The-Compiler

Description

@The-Compiler

Steps to reproduce

Install PyQt5, run pylint --extension-pkg-whitelist=PyQt5 x.py over a file containing from PyQt5 import QtWidgets

Current behavior

With astroid 2.12.13 and pylint 2.15.10, this works fine. With astroid 2.13.2, this happens:

Exception on node <ImportFrom l.1 at 0x7fc5a3c47d00> in file '/home/florian/tmp/pylintbug/x.py'
Traceback (most recent call last):
  File "/home/florian/tmp/pylintbug/.venv/lib/python3.10/site-packages/pylint/utils/ast_walker.py", line 90, in walk
    callback(astroid)
  File "/home/florian/tmp/pylintbug/.venv/lib/python3.10/site-packages/pylint/checkers/variables.py", line 1726, in visit_importfrom
    self._check_module_attrs(node, module, name.split("."))
  File "/home/florian/tmp/pylintbug/.venv/lib/python3.10/site-packages/pylint/checkers/variables.py", line 2701, in _check_module_attrs
    module = next(module.getattr(name)[0].infer())
  File "/home/florian/tmp/pylintbug/.venv/lib/python3.10/site-packages/astroid/nodes/scoped_nodes/scoped_nodes.py", line 412, in getattr
    result = [self.import_module(name, relative_only=True)]
  File "/home/florian/tmp/pylintbug/.venv/lib/python3.10/site-packages/astroid/nodes/scoped_nodes/scoped_nodes.py", line 527, in import_module
    return AstroidManager().ast_from_module_name(
  File "/home/florian/tmp/pylintbug/.venv/lib/python3.10/site-packages/astroid/manager.py", line 205, in ast_from_module_name
    return self.ast_from_module(named_module, modname)
  File "/home/florian/tmp/pylintbug/.venv/lib/python3.10/site-packages/astroid/manager.py", line 312, in ast_from_module
    return AstroidBuilder(self).module_build(module, modname)
  File "/home/florian/tmp/pylintbug/.venv/lib/python3.10/site-packages/astroid/builder.py", line 101, in module_build
    node = self.inspect_build(module, modname=modname, path=path)
  File "/home/florian/tmp/pylintbug/.venv/lib/python3.10/site-packages/astroid/raw_building.py", line 366, in inspect_build
    self.object_build(node, module)
  File "/home/florian/tmp/pylintbug/.venv/lib/python3.10/site-packages/astroid/raw_building.py", line 422, in object_build
    elif hasattr(member, "__all__"):
RuntimeError: wrapped C/C++ object of type QApplication has been deleted
x.py:1:0: F0002: x.py: Fatal error while checking 'x.py'. Please open an issue in our bug tracker so we address this. There is a pre-filled template that you can use in '/home/florian/.cache/pylint/pylint-crash-2023-01-10-11-06-17.txt'. (astroid-error)

It looks like it happens when member is QtWidgets.qApp, which is a kind of "magic" object referring to the QApplication singleton. Since none exists, it looks like PyQt doesn't like trying to access an attribute on that.

Bisected to:

It looks like 974f26f is the exact culprit.

cc @nickdrozd

(took the freedom to add appropriate labels already, hope that's fine)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions