In my opinion, it'd be better to check for NULL values at the beginning of your function and use RAISERROR (no, that's not a typo) to raise an exception. EDIT: Unfortunately, this doesn't work for UDFs, so you'll have to go with option 2.
You also have the option of specifying "RETURNS NULL ON NULL INPUT" when you create your function. If this flag is specified, the function will return NULL if any of its inputs are null...kind of paradoxical, but it may be what you want.
From the MSDN CREATE FUNCTION documentation (quoted because they don't have an anchor on their page, bleh):
  RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT
  
  Specifies the OnNULLCall attribute of a scalar-valued function. If not
  specified, CALLED ON NULL INPUT is
  implied by default. This means that
  the function body executes even if
  NULL is passed as an argument.
  
  If RETURNS NULL ON NULL INPUT is specified in a CLR function, it
  indicates that SQL Server can return
  NULL when any of the arguments it
  receives is NULL, without actually
  invoking the body of the function. If
  the method of a CLR function specified
  in  already has a
  custom attribute that indicates
  RETURNS NULL ON NULL INPUT, but the
  CREATE FUNCTION statement indicates
  CALLED ON NULL INPUT, the CREATE
  FUNCTION statement takes precedence.
  The OnNULLCall attribute cannot be
  specified for CLR table-valued
  functions.
Hope it helps somewhat, and I do agree that it's needlessly confusing.