diff --git a/mypy/config_parser.py b/mypy/config_parser.py index 0e033471d2e9..e5c0dc893c76 100644 --- a/mypy/config_parser.py +++ b/mypy/config_parser.py @@ -28,6 +28,14 @@ _INI_PARSER_CALLABLE: _TypeAlias = Callable[[Any], _CONFIG_VALUE_TYPES] +class VersionTypeError(argparse.ArgumentTypeError): + """Provide a fallback value if the Python version is unsupported.""" + + def __init__(self, *args: Any, fallback: tuple[int, int]) -> None: + self.fallback = fallback + super().__init__(*args) + + def parse_version(v: str | float) -> tuple[int, int]: m = re.match(r"\A(\d)\.(\d+)\Z", str(v)) if not m: @@ -44,7 +52,7 @@ def parse_version(v: str | float) -> tuple[int, int]: if isinstance(v, float): msg += ". You may need to put quotes around your Python version" - raise argparse.ArgumentTypeError(msg) + raise VersionTypeError(msg, fallback=defaults.PYTHON3_VERSION_MIN) else: raise argparse.ArgumentTypeError( f"Python major version '{major}' out of range (must be 3)" @@ -548,6 +556,9 @@ def parse_section( continue try: v = ct(section.get(key)) + except VersionTypeError as err_version: + print(f"{prefix}{key}: {err_version}", file=stderr) + v = err_version.fallback except argparse.ArgumentTypeError as err: print(f"{prefix}{key}: {err}", file=stderr) continue diff --git a/test-data/unit/cmdline.test b/test-data/unit/cmdline.test index 012e1e6b7fe6..4fda85d83c1b 100644 --- a/test-data/unit/cmdline.test +++ b/test-data/unit/cmdline.test @@ -440,6 +440,20 @@ python_version = 3.9 python_version = 3.13 [out] +[case testPythonVersionFallback] +# cmd: mypy main.py +[file main.py] +import sys +if sys.version_info == (3, 9): # Update here when bumping the min Python version! + reveal_type("good") +[file mypy.ini] +\[mypy] +python_version = 3.8 +[out] +mypy.ini: [mypy]: python_version: Python 3.8 is not supported (must be 3.9 or higher) +main.py:3: note: Revealed type is "Literal['good']?" +== Return code: 0 + -- This should be a dumping ground for tests of plugins that are sensitive to -- typeshed changes. [case testTypeshedSensitivePlugins]