code: def unless(exception_class_or_tuple, func, *args, **kwargs):
      
      @pipe_util
      @auto_string_formatter
      @data_structure_builder
      def construct_unless(function):
          # a wrapper so we can re-use the decorators
          def _unless(*args, **kwargs):
              try:
                  return function(*args, **kwargs)
              except exception_class_or_tuple:
                  pass
          return _unless
  
      name = lambda: 'unless(%s, %s)' % (exception_class_or_tuple, ', '.join(
          filter(None, (get_name(func), repr_args(*args, **kwargs)))))
  
      return set_name(name, construct_unless(func, *args, **kwargs))
docs: When `exception_class_or_tuple` occurs while executing `func`, it will
      be caught and ``None`` will be returned.
  
      >>> f = where(X > 10) | list | unless(IndexError, X[0])
      >>> f([5, 8, 12, 4])
      12
      >>> f([1, 2, 3])
      None