diff options
author | Barney Gale <barney.gale@gmail.com> | 2023-09-02 15:08:03 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-02 15:08:03 (GMT) |
commit | bdc3c884cdc90102ad68b6b55dc9b988e729ae35 (patch) | |
tree | df837954084737e01fc497f7f3091066f708b4db | |
parent | 594b00057e667e0d8d4e41748be056cdd829e919 (diff) | |
download | cpython-bdc3c884cdc90102ad68b6b55dc9b988e729ae35.zip cpython-bdc3c884cdc90102ad68b6b55dc9b988e729ae35.tar.gz cpython-bdc3c884cdc90102ad68b6b55dc9b988e729ae35.tar.bz2 |
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.
-rw-r--r-- | Lib/pathlib.py | 3 | ||||
-rw-r--r-- | Lib/test/test_pathlib.py | 2 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2023-07-26-22-52-48.gh-issue-78722.6SKBLt.rst | 2 |
3 files changed, 4 insertions, 3 deletions
diff --git a/Lib/pathlib.py b/Lib/pathlib.py index 758f70f..f4ec315 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -1009,8 +1009,7 @@ class Path(PurePath): 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 diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py index 74deec8..09df3fe 100644 --- a/Lib/test/test_pathlib.py +++ b/Lib/test/test_pathlib.py @@ -1766,7 +1766,7 @@ class PathTest(unittest.TestCase): # __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, diff --git a/Misc/NEWS.d/next/Library/2023-07-26-22-52-48.gh-issue-78722.6SKBLt.rst b/Misc/NEWS.d/next/Library/2023-07-26-22-52-48.gh-issue-78722.6SKBLt.rst new file mode 100644 index 0000000..aea26ee --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-07-26-22-52-48.gh-issue-78722.6SKBLt.rst @@ -0,0 +1,2 @@ +Fix issue where :meth:`pathlib.Path.iterdir` did not raise :exc:`OSError` +until iterated. |