Skip to content

pylint + pylint-pytest: pylint crashed Pylint with AstroidError #126

@IsmailSAly

Description

@IsmailSAly

The crash happens if i define an invalid/non existing module in pytest_plugin.

The import error is expected since that module doesn't exist, but it shouldn't crash pylint.

Once i remove the problematic import pylint runs fine.

The code that causes the crash:

from dotenv import load_dotenv
import pytest
import warnings
import myTestRepo.test.options as Options
import logging
import os

logger = logging.getLogger(__name__)


# Remove pkg_resources deprecation warning
warnings.simplefilter("ignore", DeprecationWarning)

pytest_plugins = (
    "myThirdPartyytest.test.AutomatedTestFixture",
    "myThirdPartyytest.test.TestListenerFixture",
    "myThirdPartyytest.test.SignalCatchingFixture",
    "myProjectPytest.test.TestLoggingFixture",
    "myProjectPytest.file.file_manager_fixture",
    "myProject.ssh.gateway_ssh",
    "myProject.jobs.job_manager_fixture",
    "myProject.cloud.myProject_cloud_fixture",
    "myProject.email.email_manager_fixture",
    "myProject.api.sync_api_fixture",
    "myProject.gps.gps_fixture",
    "myProject.pm4_emulator.pm4_emulator_fixture",
    "myProject.playwright.playwright_fixture",
    "myProject.config.config_manager_fixture",
    "myProject.power.gateway_power_fixture",
    "myProject.api.myProject_model_fixture",
)

Command used

pylint a.py

Pylint output

pylint crashed with a ``AstroidError`` and with the following stacktrace:
Traceback (most recent call last):
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/_pytest/config/__init__.py", line 865, in import_plugin
    __import__(importspec)
ModuleNotFoundError: No module named 'myProjectPytest.test.TestLoggingFixture'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/pylint/lint/pylinter.py", line 788, in _lint_file
    check_astroid_module(module)
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/pylint/lint/pylinter.py", line 1020, in check_astroid_module
    retval = self._check_astroid_module(
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/pylint/lint/pylinter.py", line 1072, in _check_astroid_module
    walker.walk(node)
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/pylint/utils/ast_walker.py", line 87, in walk
    callback(astroid)
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/pylint_pytest/checkers/fixture.py", line 129, in visit_module
    ret = pytest.main(
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/_pytest/config/__init__.py", line 159, in main
    config = _prepareconfig(args, plugins)
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/_pytest/config/__init__.py", line 346, in _prepareconfig
    config = pluginmanager.hook.pytest_cmdline_parse(
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/pluggy/_hooks.py", line 513, in __call__
    return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/pluggy/_manager.py", line 120, in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/pluggy/_callers.py", line 139, in _multicall
    raise exception.with_traceback(exception.__traceback__)
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/pluggy/_callers.py", line 122, in _multicall
    teardown.throw(exception)  # type: ignore[union-attr]
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/_pytest/helpconfig.py", line 106, in pytest_cmdline_parse
    config = yield
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/pluggy/_callers.py", line 103, in _multicall
    res = hook_impl.function(*args)
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/_pytest/config/__init__.py", line 1152, in pytest_cmdline_parse
    self.parse(args)
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/_pytest/config/__init__.py", line 1501, in parse
    self._preparse(args, addopts=addopts)
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/_pytest/config/__init__.py", line 1405, in _preparse
    self.hook.pytest_load_initial_conftests(
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/pluggy/_hooks.py", line 513, in __call__
    return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/pluggy/_manager.py", line 120, in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/pluggy/_callers.py", line 139, in _multicall
    raise exception.with_traceback(exception.__traceback__)
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/pluggy/_callers.py", line 122, in _multicall
    teardown.throw(exception)  # type: ignore[union-attr]
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/_pytest/warnings.py", line 150, in pytest_load_initial_conftests
    return (yield)
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/pluggy/_callers.py", line 122, in _multicall
    teardown.throw(exception)  # type: ignore[union-attr]
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/_pytest/capture.py", line 153, in pytest_load_initial_conftests
    yield
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/pluggy/_callers.py", line 103, in _multicall
    res = hook_impl.function(*args)
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/_pytest/config/__init__.py", line 1230, in pytest_load_initial_conftests
    self.pluginmanager._set_initial_conftests(
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/_pytest/config/__init__.py", line 588, in _set_initial_conftests
    self._try_load_conftest(
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/_pytest/config/__init__.py", line 626, in _try_load_conftest
    self._loadconftestmodules(
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/_pytest/config/__init__.py", line 666, in _loadconftestmodules
    mod = self._importconftest(
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/_pytest/config/__init__.py", line 742, in _importconftest
    self.consider_conftest(mod, registration_name=conftestpath_plugin_name)
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/_pytest/config/__init__.py", line 823, in consider_conftest
    self.register(conftestmodule, name=registration_name)
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/_pytest/config/__init__.py", line 519, in register
    self.consider_module(plugin)
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/_pytest/config/__init__.py", line 831, in consider_module
    self._import_plugin_specs(getattr(mod, "pytest_plugins", []))
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/_pytest/config/__init__.py", line 838, in _import_plugin_specs
    self.import_plugin(import_spec)
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/_pytest/config/__init__.py", line 867, in import_plugin
    raise ImportError(
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/_pytest/config/__init__.py", line 865, in import_plugin
    __import__(importspec)
ImportError: Error importing plugin "myProjectPytest.test.TestLoggingFixture": No module named 'myProjectPytest.test.TestLoggingFixture'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/pylint/lint/pylinter.py", line 752, in _lint_files
    self._lint_file(fileitem, module, check_astroid_module)
  File "/home/user/myProject-test/python/venv/lib/python3.10/site-packages/pylint/lint/pylinter.py", line 790, in _lint_file
    raise astroid.AstroidError from e
astroid.exceptions.AstroidError

Expected behavior

No crash.

Pylint version

pylint 3.3.4
astroid 3.3.8
Python 3.10.12 (main, Feb  4 2025, 14:57:36) [GCC 11.4.0]

OS / Environment

linux (Linux)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions