code: def _try_methods(methods, to_find=None):
      # type: (list, Optional[str]) -> Optional[str]
      
      found = None
      for m in methods:
          try:
              if isinstance(m, tuple):
                  for arg in m[3]:  # list(str)
                      if DEBUG:
                          log.debug("Trying: '%s %s'", m[2], arg)
                      # Arguments: (regex, _popen(command, arg), regex index)
                      found = _search(m[0], _popen(m[2], arg), m[1])
                      if DEBUG:
                          log.debug("Result: %s\n", found)
                      if found:  # Skip remaining args AND remaining methods
                          break
              elif callable(m):
                  if DEBUG:
                      log.debug("Trying: '%s' (to_find: '%s')", m.__name__, str(to_find))
                  if to_find is not None:
                      found = m(to_find)
                  else:
                      found = m()
                  if DEBUG:
                      log.debug("Result: %s\n", found)
              else:
                  log.critical("Invalid type '%s' for method '%s'", type(m), str(m))
          except Exception as ex:
              if DEBUG:
                  log.debug("Exception: %s", str(ex))
              if DEBUG >= 2:
                  log.debug(traceback.format_exc())
              continue
          if found:  # Skip remaining methods
              break
      return found
docs: Runs the methods specified by _hunt_for_mac().
  
      We try every method and see if it returned a MAC address. If it returns
      None or raises an exception, we continue and try the next method.