when the return value has an obvious "error mode", such as returning "" for file name (or -1 for collection size), and when the error _must_ be handled by the caller, return a value. If either of those conditions is not met, throw an exception.