diff --git a/mypy/config_parser.py b/mypy/config_parser.py index 4dbd6477c81e8..ca678d3b4c7a7 100644 --- a/mypy/config_parser.py +++ b/mypy/config_parser.py @@ -471,9 +471,9 @@ def parse_section( if report_type in defaults.REPORTER_NAMES: report_dirs[report_type] = str(section[key]) else: - print(f"{prefix}Unrecognized report type: {key}", file=stderr) - continue - if key.startswith("x_"): + msg = f"{prefix}Unrecognized report type: {key}" + raise argparse.ArgumentTypeError(msg) + elif key.startswith("x_"): pass # Don't complain about `x_blah` flags elif key.startswith("no_") and hasattr(template, key[3:]): options_key = key[3:] @@ -490,7 +490,8 @@ def parse_section( elif key == "strict": pass # Special handling below else: - print(f"{prefix}Unrecognized option: {key} = {section[key]}", file=stderr) + msg = f"{prefix}Unrecognized option: {key} = {section[key]}" + raise argparse.ArgumentTypeError(msg) if invert: dv = getattr(template, options_key, None) else: @@ -512,14 +513,14 @@ def parse_section( try: v = ct(section.get(key)) except argparse.ArgumentTypeError as err: - print(f"{prefix}{key}: {err}", file=stderr) - continue + msg = f"{prefix}{key}: {err}" + raise argparse.ArgumentTypeError(msg) from err else: print(f"{prefix}Don't know what type {key} should have", file=stderr) continue except ValueError as err: - print(f"{prefix}{key}: {err}", file=stderr) - continue + msg = f"{prefix}{key}: {err}" + raise ValueError(msg) from err if key == "strict": if v: set_strict_flags() diff --git a/mypy/main.py b/mypy/main.py index 3eb8a76a6de3f..f3c3993220cf0 100644 --- a/mypy/main.py +++ b/mypy/main.py @@ -1248,7 +1248,10 @@ def set_strict_flags() -> None: setattr(options, dest, value) # Parse config file first, so command line can override. - parse_config_file(options, set_strict_flags, config_file, stdout, stderr) + try: + parse_config_file(options, set_strict_flags, config_file, stdout, stderr) + except (argparse.ArgumentTypeError, ValueError) as err: + raise SystemExit(str(err)) from err # Set strict flags before parsing (if strict mode enabled), so other command # line options can override.