mirror of
https://github.com/python/cpython.git
synced 2025-12-04 00:30:19 +00:00
Add optional 'onerror' argument to os.walk(), to control error
handling.
This commit is contained in:
parent
a2f7728341
commit
bf1bef820c
3 changed files with 24 additions and 4 deletions
15
Lib/os.py
15
Lib/os.py
|
|
@ -203,7 +203,7 @@ def renames(old, new):
|
|||
|
||||
__all__.extend(["makedirs", "removedirs", "renames"])
|
||||
|
||||
def walk(top, topdown=True):
|
||||
def walk(top, topdown=True, onerror=None):
|
||||
"""Directory tree generator.
|
||||
|
||||
For each directory in the directory tree rooted at top (including top
|
||||
|
|
@ -232,6 +232,13 @@ def walk(top, topdown=True):
|
|||
dirnames have already been generated by the time dirnames itself is
|
||||
generated.
|
||||
|
||||
By default errors from the os.listdir() call are ignored. If
|
||||
optional arg 'onerror' is specified, it should be a function; it
|
||||
will be called with one argument, an os.error instance. It can
|
||||
report the error to continue with the walk, or raise the exception
|
||||
to abort the walk. Note that the filename is available as the
|
||||
filename attribute of the exception object.
|
||||
|
||||
Caution: if you pass a relative pathname for top, don't change the
|
||||
current working directory between resumptions of walk. walk never
|
||||
changes the current directory, and assumes that the client doesn't
|
||||
|
|
@ -259,7 +266,9 @@ def walk(top, topdown=True):
|
|||
# Note that listdir and error are globals in this module due
|
||||
# to earlier import-*.
|
||||
names = listdir(top)
|
||||
except error:
|
||||
except error, err:
|
||||
if onerror is not None:
|
||||
onerror(err)
|
||||
return
|
||||
|
||||
dirs, nondirs = [], []
|
||||
|
|
@ -274,7 +283,7 @@ def walk(top, topdown=True):
|
|||
for name in dirs:
|
||||
path = join(top, name)
|
||||
if not islink(path):
|
||||
for x in walk(path, topdown):
|
||||
for x in walk(path, topdown, onerror):
|
||||
yield x
|
||||
if not topdown:
|
||||
yield top, dirs, nondirs
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue