diff options
Diffstat (limited to 'Lib/os.py')
-rw-r--r-- | Lib/os.py | 15 |
1 files changed, 12 insertions, 3 deletions
@@ -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 |