diff --git a/changelog/13835.bugfix.rst b/changelog/13835.bugfix.rst new file mode 100644 index 00000000000..89a8d1b96e1 --- /dev/null +++ b/changelog/13835.bugfix.rst @@ -0,0 +1 @@ +``get_user()`` now correctly returns ``None`` when ``getpass.getuser()`` raises :exc:`OSError`, which Python 3.13 introduced when no username environment variable is set (previously only :exc:`ImportError` and :exc:`KeyError` were caught). diff --git a/testing/test_tmpdir.py b/testing/test_tmpdir.py index 096527e6273..0c59d261090 100644 --- a/testing/test_tmpdir.py +++ b/testing/test_tmpdir.py @@ -368,6 +368,21 @@ def test_get_user(monkeypatch): assert get_user() is None +def test_get_user_oserror(monkeypatch): + """Test that get_user() returns None when getpass.getuser() raises OSError. + + Python 3.13 changed getpass.getuser() to raise OSError (instead of + ImportError or KeyError) when no username can be determined from the + environment. Regression test for #13835. + """ + + def raise_oserror(): + raise OSError("No username set in the environment") + + monkeypatch.setattr("getpass.getuser", raise_oserror) + assert get_user() is None + + class TestNumberedDir: PREFIX = "fun-"