diff --git a/src/flake8/options/config.py b/src/flake8/options/config.py index f5c93ce7..36fe9760 100644 --- a/src/flake8/options/config.py +++ b/src/flake8/options/config.py @@ -23,7 +23,10 @@ def _stat_key(s: str) -> Tuple[int, int]: def _find_config_file(path: str) -> Optional[str]: # on windows if the homedir isn't detected this returns back `~` home = os.path.expanduser("~") - home_stat = _stat_key(home) if home != "~" else None + try: + home_stat = _stat_key(home) if home != "~" else None + except OSError: # FileNotFoundError / PermissionError / etc. + home_stat = None dir_stat = _stat_key(path) cfg = configparser.RawConfigParser() diff --git a/tests/unit/test_options_config.py b/tests/unit/test_options_config.py index 7a7c4f7c..bdc22087 100644 --- a/tests/unit/test_options_config.py +++ b/tests/unit/test_options_config.py @@ -78,6 +78,13 @@ def test_find_config_ignores_homedir(tmp_path): assert config._find_config_file(str(subdir)) is None +def test_find_config_ignores_unknown_homedir(tmp_path): + subdir = tmp_path.joinpath("d") + + with mock.patch.object(os.path, "expanduser", return_value=str(subdir)): + assert config._find_config_file(str(tmp_path)) is None + + def test_load_config_config_specified_skips_discovery(tmpdir): tmpdir.join("setup.cfg").write("[flake8]\nindent-size=2\n") custom_cfg = tmpdir.join("custom.cfg")