mirror of
https://github.com/python/cpython.git
synced 2025-11-11 14:44:57 +00:00
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:
parent
fd7e08a6f3
commit
ddf2e953c2
3 changed files with 11 additions and 7 deletions
|
|
@ -913,6 +913,13 @@ class UtimeTests(unittest.TestCase):
|
||||||
os.utime(self.fname, None)
|
os.utime(self.fname, None)
|
||||||
self._test_utime_current(set_time)
|
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):
|
def get_file_system(self, path):
|
||||||
if sys.platform == 'win32':
|
if sys.platform == 'win32':
|
||||||
root = os.path.splitdrive(os.path.abspath(path))[0] + '\\'
|
root = os.path.splitdrive(os.path.abspath(path))[0] + '\\'
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
Exceptions raised by os.utime builtin function now include the related
|
||||||
|
filename
|
||||||
|
|
@ -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);
|
_Py_time_t_to_FILE_TIME(utime.mtime_s, utime.mtime_ns, &mtime);
|
||||||
}
|
}
|
||||||
if (!SetFileTime(hFile, NULL, &atime, &mtime)) {
|
if (!SetFileTime(hFile, NULL, &atime, &mtime)) {
|
||||||
/* Avoid putting the file name into the error here,
|
path_error(path);
|
||||||
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);
|
|
||||||
CloseHandle(hFile);
|
CloseHandle(hFile);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
@ -6351,8 +6347,7 @@ os_utime_impl(PyObject *module, path_t *path, PyObject *times, PyObject *ns,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (result < 0) {
|
if (result < 0) {
|
||||||
/* see previous comment about not putting filename in error here */
|
path_error(path);
|
||||||
posix_error();
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue