Closed
Description
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
.