Skip to content

Running pylint on class with duplicate bases raises DuplicateBasesError exception in astroid #3247

@Jackenmen

Description

@Jackenmen

Steps to reproduce

Minimal code to reproduce the error (running pylint on a file with this contents will error out):

import asyncio from typing import AsyncContextManager, Awaitable class _ReproCtxManager(Awaitable[None], AsyncContextManager[None]): def __init__(self): pass def __await__(self): return self.__aenter__().__await__() async def __aenter__(self): return "test" async def __aexit__(self, exc_type, exc, tb): return None async def main(): async with _ReproCtxManager() as x: print(x) print(await _ReproCtxManager()) loop = asyncio.get_event_loop() loop.run_until_complete(main())

Current behavior

I get this traceback when running pylint min_bug.py

Traceback
************* Module min_bug min_bug.py:1:0: C0114: Missing module docstring (missing-module-docstring) min_bug.py:5:0: E0241: Duplicate bases for class '_ReproCtxManager' (duplicate-b ases) min_bug.py:10:15: E1101: Instance of 'str' has no '__await__' member (no-member) min_bug.py:15:4: C0103: Argument name "tb" doesn't conform to snake_case naming style (invalid-name) min_bug.py:19:0: C0116: Missing function or method docstring (missing-function-d ocstring) Traceback (most recent call last): File "c:\python37\lib\runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "c:\python37\lib\runpy.py", line 85, in _run_code exec(code, run_globals) File "C:\Python37\Scripts\pylint.exe\__main__.py", line 7, in <module> File "c:\python37\lib\site-packages\pylint\__init__.py", line 23, in run_pylin t PylintRun(sys.argv[1:]) File "c:\python37\lib\site-packages\pylint\lint.py", line 1731, in __init__ linter.check(args) File "c:\python37\lib\site-packages\pylint\lint.py", line 1004, in check self._do_check(files_or_modules) File "c:\python37\lib\site-packages\pylint\lint.py", line 1165, in _do_check self.check_astroid_module(ast_node, walker, rawcheckers, tokencheckers) File "c:\python37\lib\site-packages\pylint\lint.py", line 1252, in check_astro id_module walker.walk(ast_node) File "c:\python37\lib\site-packages\pylint\utils\ast_walker.py", line 77, in w alk self.walk(child) File "c:\python37\lib\site-packages\pylint\utils\ast_walker.py", line 77, in w alk self.walk(child) File "c:\python37\lib\site-packages\pylint\utils\ast_walker.py", line 74, in w alk callback(astroid) File "c:\python37\lib\site-packages\pylint\checkers\async.py", line 56, in vis it_asyncwith inferred = checker_utils.safe_infer(ctx_mgr) File "c:\python37\lib\site-packages\pylint\checkers\utils.py", line 1084, in s afe_infer value = next(inferit) File "c:\python37\lib\site-packages\astroid\decorators.py", line 131, in raise _if_nothing_inferred yield next(generator) File "c:\python37\lib\site-packages\astroid\decorators.py", line 95, in wrappe d res = next(generator) File "c:\python37\lib\site-packages\astroid\inference.py", line 227, in infer_ call yield from callee.infer_call_result(caller=self, context=callcontext) File "c:\python37\lib\site-packages\astroid\scoped_nodes.py", line 2136, in in fer_call_result if any(cls.name in EXCEPTION_BASE_CLASSES for cls in self.mro()): File "c:\python37\lib\site-packages\astroid\scoped_nodes.py", line 2813, in mr o return self._compute_mro(context=context) File "c:\python37\lib\site-packages\astroid\scoped_nodes.py", line 2802, in _c ompute_mro unmerged_mro = list(clean_duplicates_mro(unmerged_mro, self, context)) File "c:\python37\lib\site-packages\astroid\scoped_nodes.py", line 104, in cle an_duplicates_mro context=context, astroid.exceptions.DuplicateBasesError: Duplicates found in MROs (_ReproCtxManag er), (_GenericAlias, object), (_GenericAlias, object), (_GenericAlias, _GenericA lias) for <ClassDef._ReproCtxManager l.5 at 0x2554c696988>. 

Expected behavior

I would expect no exception raised and just have the E0241/duplicate-bases warning shown without the exception. I wasn't sure if I should put this issue here on astroid repo so I'm going with this one first.

pylint --version output

pylint 2.4.4 astroid 2.3.3 Python 3.7.5 (tags/v3.7.5:5c02a39a0b, Oct 15 2019, 00:11:34) [MSC v.1916 64 bit (AMD64)] 

This issue also happens on latest commit of master.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions