summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBarney Gale <barney.gale@gmail.com>2023-09-02 15:08:03 (GMT)
committerGitHub <noreply@github.com>2023-09-02 15:08:03 (GMT)
commitbdc3c884cdc90102ad68b6b55dc9b988e729ae35 (patch)
treedf837954084737e01fc497f7f3091066f708b4db
parent594b00057e667e0d8d4e41748be056cdd829e919 (diff)
downloadcpython-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.py3
-rw-r--r--Lib/test/test_pathlib.py2
-rw-r--r--Misc/NEWS.d/next/Library/2023-07-26-22-52-48.gh-issue-78722.6SKBLt.rst2
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.