This seems to work:
FullAddr = " '.join([str(i) for i in [ !Add_Number!, !AddNum_Suf!, !St_PreMod!, !St_PreDir!, !St_PreTyp!, !St_PreSep!, !St_Name!, !St_PosTyp!, !St_PosDir!, !St_PosMod!] if i])
But, you need to fix the typo in the field list (that should be a comma between the two fields):
, !St_PreDir!. !St_PreTyp!,
Then return FullAddr.
This is my initial use case for this concatenate script, is to make a Full Street Name field. But, I use updateCursor (updates 1300 records in less than a second):
ufields = ['STRNID', 'DirectPrefix', 'StreetName', 'StreetType', 'DirectSuffix', 'FullStreetName']
with arcpy.da.UpdateCursor(in_SDE_FC, ufields) as cursor:
for row in cursor:
row[5] = ' '.join(filter(None, [row[1], row[2], row[3],row[4]]))
cursor.updateRow(row)
R_