gh-109033: Return filename with os.utime errors (#109034)

The filename was previously intentionally omitted from exception because
"it might confuse the user". Uncaught exceptions are not generally a
replacement for user-facing error messages, so obscuring this
information only has the effect of making the programmer's life more
difficult.
This commit is contained in:
Ronan Pigott 2023-09-19 16:18:23 -07:00 committed by GitHub
parent fd7e08a6f3
commit ddf2e953c2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 11 additions and 7 deletions

View File

@ -913,6 +913,13 @@ class UtimeTests(unittest.TestCase):
os.utime(self.fname, None)
self._test_utime_current(set_time)
def test_utime_nonexistent(self):
now = time.time()
filename = 'nonexistent'
with self.assertRaises(FileNotFoundError) as cm:
os.utime(filename, (now, now))
self.assertEqual(cm.exception.filename, filename)
def get_file_system(self, path):
if sys.platform == 'win32':
root = os.path.splitdrive(os.path.abspath(path))[0] + '\\'

View File

@ -0,0 +1,2 @@
Exceptions raised by os.utime builtin function now include the related
filename

View File

@ -6307,11 +6307,7 @@ os_utime_impl(PyObject *module, path_t *path, PyObject *times, PyObject *ns,
_Py_time_t_to_FILE_TIME(utime.mtime_s, utime.mtime_ns, &mtime);
}
if (!SetFileTime(hFile, NULL, &atime, &mtime)) {
/* Avoid putting the file name into the error here,
as that may confuse the user into believing that
something is wrong with the file, when it also
could be the time stamp that gives a problem. */
PyErr_SetFromWindowsErr(0);
path_error(path);
CloseHandle(hFile);
return NULL;
}
@ -6351,8 +6347,7 @@ os_utime_impl(PyObject *module, path_t *path, PyObject *times, PyObject *ns,
#endif
if (result < 0) {
/* see previous comment about not putting filename in error here */
posix_error();
path_error(path);
return NULL;
}