TypeError: expected HostObject, got List[object]

I have a error that i below script.

can you please give me a hints what’s wrong with this scripts?

import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

# Import DocumentManager and TransactionManager
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

# Import RevitAPI
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Mechanical import *
from Autodesk.Revit.DB.Plumbing import *
from Autodesk.Revit.DB.ExternalService import *
from Autodesk.Revit.DB.ExtensibleStorage import *

# Import ToDSType(bool) extension method
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
# Import ToProtoType, ToRevitType geometry conversion extension methods
clr.ImportExtensions(Revit.GeometryConversion)

# Import DSCore nodes in Dynamo
clr.AddReference('DSCoreNodes')
import DSCore
from DSCore import *

# Import python library
import sys
pyt_path = r'C:\Program Files (x86)\IronPython 2.7\Lib'
sys.path.append(pyt_path)
import os
import shutil
import math
# Import math library
from math import *

#Import System Library
import System
from System.Collections.Generic import *
from System.IO import Directory, Path

doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application

if isinstance(IN[0], list):elems = UnwrapElement(IN[0])
else: elems = [UnwrapElement(IN[0])]

def getfaces(id, s):
	faces = s.Faces
	painted = [doc.IsPainted(id, f) for f in faces]
	surfs = [f.ToProtoType()[0] for f in faces]
	return surfs, painted

outbool = []
outsurf = []

for e in elems:
	eId = e.Id
	geom = [g for g in e.Geometry[Options()] if isinstance(g, Solid)]
	if geom == []:
		outsurf.append("Not a valid solid.")
		outbool.append(False)
		continue
	for g in geom:
		gSurf, gPaint = getfaces(eId, g)
		if gSurf == []:
			continue
		else:
			outsurf.append(gSurf)
			outbool.append(gPaint)
						
	for face1 in outsurf:
		if all(i==True for i in face1):
			outbool.append(False)
		else:
			outbool.append(True)
			


def getFaceloope(elems):
	lstref = HostObjectUtils.GetSideFaces(elems, ShellLayerType.Interior)
	for ref in lstref:
		face = elems.GetGeometryObjectFromReference(ref)
		edgLoopArr = face.EdgeLoops
		for lstEdg in edgLoopArr:
			lstCurvDS = [x.AsCurve().ToProtoType() for x in lstEdg]
			polycurvDS = DS.PolyCurve.ByJoinedCurves(lstCurvDS)
			lstCurv = List[Curve]([x.ToRevitType() for x in polycurvDS.Curves()])
			curvLoop = CurveLoop.Create(lstCurv)
			return curvLoop

vft  = FilteredElementCollector(doc).OfClass(ViewFamilyType).ToElements().Find(lambda i : i.ViewFamily == ViewFamily.Elevation)
viewTypeId = vft.Id

TransactionManager.Instance.EnsureInTransaction(doc)
#get propreties
curvloop = getFaceloop(elems)
locCurv = elems.Location.Curve
vectA = locCurv.Direction.Normalize()
offSetCurve =  locCurv.CreateOffset(2, vectA.CrossProduct(XYZ(-1,0,0)))
pt = offSetCurve.Evaluate(0.5, True)
ln = Line.CreateBound(pt, pt + XYZ(0,0,10))
ang = vectA.AngleTo(XYZ(1,0,0)) * XYZ(1,0,0).CrossProduct(vectA).Normalize().Z
#create marker
eleMarker = ElevationMarker.CreateElevationMarker(doc, viewTypeId, pt, 100)
indXElev = 0 if ang > 0 else 2
ele = eleMarker.CreateElevation(doc, doc.ActiveView.Id , indXElev)
rot = eleMarker.Location.Rotate(ln, ang  + math.pi / 2)
#set cropShape
crManager = ele.GetCropRegionShapeManager()
crManager.SetCropShape(curvloopWall)

TransactionManager.Instance.TransactionTaskDone()

OUT = face1,vft,eleMarker

You are feeding your custom definition a list of objects instead of one object.

First line of the defintion is taking elems (plural) and feeding the list into a function that needs an item. You need to loop here.

Alternatively you can loop over the list of elements fed into the function.

Look into both for loops and list comprehension in python for examples on how to do this.