Bug Report
On v1.15.0, with mypy --warn-unreachable ... successfully finds no errors with
import re re.sub("x", lambda m: m.group().count("x") * "x", "x")
but reports an error with
import re for _ in re.findall("x", "x"): re.sub("x", lambda m: m.group().count("x") * "x", "x") # E: Argument 1 to "count" of "bytes" has incompatible type "str"; expected "Buffer | SupportsIndex" [arg-type]
for reference, both examples pass with v1.14.1 and with v1.15.0 without --warn-unreachable.
Minimal repro to avoid re dependency, playground:
from typing import overload, Any, AnyStr, Callable, Generic def takes_str(s: str) -> str: return s class Match(Generic[AnyStr]): def group(self, group: int, /) -> AnyStr: ... @overload def sub( pattern: str, repl: Callable[[Match[str]], str] ) -> str: ... @overload def sub( pattern: bytes, repl: Callable[[Match[bytes]], bytes] ) -> bytes: ... text: str while True: text = sub("", lambda m: takes_str(m.group(1))) # E: Argument 1 to "takes_str" has incompatible type "bytes"; expected "str" [arg-type]
Bisects to #18433, but only exposed by it - accepting this loop for the second time results in this error.
[Units] Ignore invalid type error involving re.sub and Match.group
Activity
sterliakov commented on Apr 11, 2025
Minimal repro to avoid re dependency, playground:
sterliakov commented on Apr 11, 2025
Bisects to #18433, but only exposed by it - accepting this loop for the second time results in this error.
[Units] Ignore invalid type error involving re.sub and Match.group