Closed
Description
Consider the following program:
import builtins
from typing import Any, Optional, Union
def func1() -> Optional[str]:
multi_state = 'value' # type: Optional[str]
if multi_state is None:
return None
reveal_type(multi_state)
return multi_state
def func2() -> Any:
multi_state = 'value' # type: Union[str, builtins.ellipsis]
if multi_state is Ellipsis:
return None
reveal_type(multi_state)
return multi_state
func1()
func2()
If I typecheck with:
$ mypy --strict-optional --suppress-error-context test_recognize_ellipsis_comparison.py
I get:
test_recognize_ellipsis_comparison.py:8: error: Revealed type is 'builtins.str'
test_recognize_ellipsis_comparison.py:15: error: Revealed type is 'Union[builtins.str, builtins.ellipsis]'
But expect:
test_recognize_ellipsis_comparison.py:8: error: Revealed type is 'builtins.str'
test_recognize_ellipsis_comparison.py:15: error: Revealed type is 'builtins.str'
This suggests that mypy does not recognize the comparison value is Ellipsis
in the same way that it recognizes value is None
.
In my own codebase having explicit recognition for Ellipsis would be useful in some functions that use both None and Ellipsis as sentinel values.
Metadata
Metadata
Assignees
Labels
No labels