The ArcPy layer.labelClasses.expression method does not accept properly formatted strings if they contain multiple quotation marks.
Last Published: June 24, 2015ArcGIS for Desktop
Bug ID Number
June 9, 2015
November 24, 2020
ArcGIS for Desktop
Will Not Be Addressed
The development team has considered the issue or request and concluded it will not be addressed. The issue's Additional Information section may contain further explanation.
This is a known behavior. The additional quotes are needed to make sure the Python window reads the field 'FID' and not a variable in a list.
The additional quotes are needed to properly form the string to be set as the expression. Without them it will not read 'FID' as a field. Instead, the method inteprates as the user is trying to use a variable in a list, because that is what that means in a Python interpreter. In the expression dialog, it does not expect the additional quotes because the Python parser understands that the brackets around a word indicate a field.
Use triple quotes around the expression to maintain the full string:
layer.labelClasses.expression = ''' "<CLR red='255'><FNT size = '17'>" + [OBJECTID] + "</FNT></CLR>" '''