GH-78722: Raise exceptions from `pathlib.Path.iterdir()` without delay. (#107320)

`pathlib.Path.iterdir()` now immediately raises any `OSError`
exception from `os.listdir()`, rather than waiting until its
result is iterated over.
This commit is contained in:
Barney Gale 2023-09-02 16:08:03 +01:00 committed by GitHub
parent 594b00057e
commit bdc3c884cd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 4 additions and 3 deletions

View File

@ -1009,8 +1009,7 @@ def iterdir(self):
The children are yielded in arbitrary order, and the
special entries '.' and '..' are not included.
"""
for name in os.listdir(self):
yield self._make_child_relpath(name)
return (self._make_child_relpath(name) for name in os.listdir(self))
def _scandir(self):
# bpo-24132: a future version of pathlib will support subclassing of

View File

@ -1766,7 +1766,7 @@ def test_iterdir_nodir(self):
# __iter__ on something that is not a directory.
p = self.cls(BASE, 'fileA')
with self.assertRaises(OSError) as cm:
next(p.iterdir())
p.iterdir()
# ENOENT or EINVAL under Windows, ENOTDIR otherwise
# (see issue #12802).
self.assertIn(cm.exception.errno, (errno.ENOTDIR,

View File

@ -0,0 +1,2 @@
Fix issue where :meth:`pathlib.Path.iterdir` did not raise :exc:`OSError`
until iterated.