mypy
mypy copied to clipboard
Unexpected "incompatible type" error when chaining bytes(filter())
Bug Report
Mypy reports a strange type error when calling bytes(filter(...)) like below.
Write the following contents to a file and run mypy:
f = filter(lambda ch: chr(ch), b"hello")
bytes(f)
bytes(filter(lambda ch: chr(ch), b"hello"))
Mypy reports an error on line 4 but not on lines 1/2, despite the two sections being functionally identical. The expected result is that there should be no errors in this code example.
> mypy /tmp/test.py
/tmp/test.py:4: error: Argument 1 to "chr" has incompatible type "SupportsIndex"; expected "int"
Found 1 error in 1 file (checked 1 source file)
Your Environment
- Mypy version used: mypy 0.931
- Mypy command-line flags: none
- Mypy configuration options from
mypy.ini(and other config files): none - Python version used: python 3.10.2
- Operating system and version: Arch linux and windows 10
After rolling back mypy on windows, this error first appears in v0.920
The issue still exists with mypy 0.991, Python 3.11.1 and Windows 10.
def IgnoreColor(s: bytes) -> bytes:
bytes(filter(lambda x: not (0x01 <= x <= 0x1F or x == 0x7F), s))
error: Argument 1 to "filter" has incompatible type "Callable[[Any], bool]"; expected "Callable[[int], TypeGuard[SupportsIndex]]" [arg-type]
error: Unsupported operand types for >= ("int" and "SupportsIndex") [operator]
error: Unsupported operand types for <= ("int" and "SupportsIndex") [operator]