docs: def load_neurons(neurons,
                   neuron_loader=load_neuron,
                   name=None,
                   population_class=Population,
                   ignored_exceptions=()):
      '''Create a population object from all morphologies in a directory\
          of from morphologies in a list of file names
  
      Parameters:
          neurons: directory path or list of neuron file paths
          neuron_loader: function taking a filename and returning a neuron
          population_class: class representing populations
          name (str): optional name of population. By default 'Population' or\
              filepath basename depending on whether neurons is list or\
              directory path respectively.
  
      Returns:
          neuron population object
  
      '''
      if isinstance(neurons, (list, tuple)):
          files = neurons
          name = name if name is not None else 'Population'
      elif isinstance(neurons, StringType):
          files = get_files_by_path(neurons)
          name = name if name is not None else os.path.basename(neurons)
  
      ignored_exceptions = tuple(ignored_exceptions)
      pop = []
      for f in files:
          try:
              pop.append(neuron_loader(f))
          except NeuroMError as e:
              if isinstance(e, ignored_exceptions):
                  L.info('Ignoring exception "%s" for file %s',
                         e, os.path.basename(f))
                  continue
              raise
  
      return population_class(pop, name=name)