code: def walkfiles(self, pattern=None, errors='strict'):
          
          if errors not in ('strict', 'warn', 'ignore'):
              raise ValueError("invalid errors parameter")
  
          try:
              childList = self.listdir()
          except Exception:
              if errors == 'ignore':
                  return
              elif errors == 'warn':
                  warnings.warn(
                      "Unable to list directory '%s': %s"
                      % (self, sys.exc_info()[1]),
                      TreeWalkWarning)
                  return
              else:
                  raise
  
          for child in childList:
              try:
                  isfile = child.isfile()
                  isdir = not isfile and child.isdir()
              except:
                  if errors == 'ignore':
                      continue
                  elif errors == 'warn':
                      warnings.warn(
                          "Unable to access '%s': %s"
                          % (self, sys.exc_info()[1]),
                          TreeWalkWarning)
                      continue
                  else:
                      raise
  
              if isfile:
                  if pattern is None or child.fnmatch(pattern):
                      yield child
              elif isdir:
                  for f in child.walkfiles(pattern, errors):
                      yield f
docs: D.walkfiles() -> iterator over files in D, recursively.
  
          The optional argument `pattern` limits the results to files
          with names that match the pattern.  For example,
          ``mydir.walkfiles('*.tmp')`` yields only files with the ``.tmp``
          extension.