code: def clean(self, value):
  		
  
  		# If the value is None and it's optional, return as is
  		if value is None and self._optional:
  			return None
  
  		# Go through each of the nodes
  		for i in range(len(self._nodes)):
  
  			# If it's valid
  			if self._nodes[i].valid(value):
  
  				# Use it's clean
  				return self._nodes[i].clean(value)
  
  		# Something went wrong
  		raise ValueError('value', value)
docs: Clean
  
  		Uses the valid method to check which type the value is, and then calls
  		the correct version of clean on that node
  
  		Arguments:
  			value {mixed} -- The value to clean
  
  		Returns:
  			mixed