mirror of
https://github.com/python/cpython.git
synced 2025-12-10 11:00:14 +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
|
|
@ -1054,7 +1054,8 @@ which is used to set the access and modified times, respectively.
|
||||||
Availability: Macintosh, \UNIX, Windows.
|
Availability: Macintosh, \UNIX, Windows.
|
||||||
\end{funcdesc}
|
\end{funcdesc}
|
||||||
|
|
||||||
\begin{funcdesc}{walk}{top\optional{, topdown\code{=True}}}
|
\begin{funcdesc}{walk}{top\optional{, topdown\code{=True}
|
||||||
|
\optional{, onerror\code{=None}}}}
|
||||||
\index{directory!walking}
|
\index{directory!walking}
|
||||||
\index{directory!traversal}
|
\index{directory!traversal}
|
||||||
\function{walk()} generates the file names in a directory tree, by
|
\function{walk()} generates the file names in a directory tree, by
|
||||||
|
|
@ -1087,6 +1088,13 @@ about directories the caller creates or renames before it resumes
|
||||||
false is ineffective, because in bottom-up mode the directories in
|
false is ineffective, because in bottom-up mode the directories in
|
||||||
\var{dirnames} are generated before \var{dirnames} itself is generated.
|
\var{dirnames} are generated before \var{dirnames} itself is generated.
|
||||||
|
|
||||||
|
By default errors from the \code{os.listdir()} call are ignored. If
|
||||||
|
optional argument \var{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
|
||||||
|
\code{filename} attribute of the exception object.
|
||||||
|
|
||||||
\begin{notice}
|
\begin{notice}
|
||||||
If you pass a relative pathname, don't change the current working
|
If you pass a relative pathname, don't change the current working
|
||||||
directory between resumptions of \function{walk()}. \function{walk()}
|
directory between resumptions of \function{walk()}. \function{walk()}
|
||||||
|
|
|
||||||
15
Lib/os.py
15
Lib/os.py
|
|
@ -203,7 +203,7 @@ def renames(old, new):
|
||||||
|
|
||||||
__all__.extend(["makedirs", "removedirs", "renames"])
|
__all__.extend(["makedirs", "removedirs", "renames"])
|
||||||
|
|
||||||
def walk(top, topdown=True):
|
def walk(top, topdown=True, onerror=None):
|
||||||
"""Directory tree generator.
|
"""Directory tree generator.
|
||||||
|
|
||||||
For each directory in the directory tree rooted at top (including top
|
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
|
dirnames have already been generated by the time dirnames itself is
|
||||||
generated.
|
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
|
Caution: if you pass a relative pathname for top, don't change the
|
||||||
current working directory between resumptions of walk. walk never
|
current working directory between resumptions of walk. walk never
|
||||||
changes the current directory, and assumes that the client doesn't
|
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
|
# Note that listdir and error are globals in this module due
|
||||||
# to earlier import-*.
|
# to earlier import-*.
|
||||||
names = listdir(top)
|
names = listdir(top)
|
||||||
except error:
|
except error, err:
|
||||||
|
if onerror is not None:
|
||||||
|
onerror(err)
|
||||||
return
|
return
|
||||||
|
|
||||||
dirs, nondirs = [], []
|
dirs, nondirs = [], []
|
||||||
|
|
@ -274,7 +283,7 @@ def walk(top, topdown=True):
|
||||||
for name in dirs:
|
for name in dirs:
|
||||||
path = join(top, name)
|
path = join(top, name)
|
||||||
if not islink(path):
|
if not islink(path):
|
||||||
for x in walk(path, topdown):
|
for x in walk(path, topdown, onerror):
|
||||||
yield x
|
yield x
|
||||||
if not topdown:
|
if not topdown:
|
||||||
yield top, dirs, nondirs
|
yield top, dirs, nondirs
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,9 @@ Extension modules
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Added optional 'onerror' argument to os.walk(), to control error
|
||||||
|
handling.
|
||||||
|
|
||||||
- inspect.is{method|data}descriptor was added, to allow pydoc display
|
- inspect.is{method|data}descriptor was added, to allow pydoc display
|
||||||
__doc__ of data descriptors.
|
__doc__ of data descriptors.
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue