Dear Sir!
I tried to customize a field value in polygon featureclass. For that I wrote a python function. Then using Field Calculator, I copy this function to Pre_Logic Script Code: and call the function. it gives me error.
Then I tried the same using Calculate Field tool in ArcToolbox. It works correctly.
Pl explain why I cannot run the above function using Field Calculator.
My function is given below:
def lblcal(a):
Dic1 = {'11':'PP', '13':'TOPOPP', '14':'FTP', '15':'VP', '16':'FVP', '17':'CP', '18':'FCP', '19':'FSP', '20':'FSPP', '21':'ISPP', '22':'FUP'}
if a[2:4] in Dic1.keys():
m = Dic1.get(a[2:4])
if (a[9] == 's') is True:
str1 = 'SUP' + str(int(a[10:15]))
else:
str1 = 'Inset' + str(int(a[10:15]))
if (a[15] == 's') is True:
str2 = 'Sheet' + str(int(a[16:20]))
str3 = m + ' ' + str(int(a[4:9])) + str1 + str2
return (str3)
I am working in ArcGIS 9.3
Thanks
Padmasiri
you have to supply it with a field name as a substitute for 'a'
the function should go in the code block section then the call to the is made in the expression box like
lblcal([yourfield]) if using VB or lblcal(!yourfield!) if using the Python parser
In addition to what Dan mentions, you should try and post the post using the instructions found here: Posting Code blocks in the new GeoNet
I copied the code and pasted it in an Python IDE and there were issues with the indentation. Apart from that you might be running into an error like "UnboundLocalError: local variable 'str3' referenced before assignment", since str3 only gets assigned in case a[15] is 's'.
def lblcal(a): Dic1 = {'11':'PP', '13':'TOPOPP', '14':'FTP', '15':'VP', '16':'FVP', '17':'CP', '18':'FCP', '19':'FSP', '20':'FSPP', '21':'ISPP', '22':'FUP'} if a[2:4] in Dic1: m = Dic1[a[2:4]] if a[9] == 's': str1 = 'SUP' + str(int(a[10:15])) else: str1 = 'Inset' + str(int(a[10:15])) if a[15] == 's': str2 = 'Sheet' + str(int(a[16:20])) str3 = m + ' ' + str(int(a[4:9])) + str1 + str2 return (str3)
This code will probably still generate the error you encounter. What is the error you receive? Does it calculate for some records the values and breaks? Is it possible to provide some values of 'a' to check if it works?
BTW: