<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Versioned Data, multiple UpdateCursors, RuntimeError: The requested operation is invalid on a closed state in Python Questions</title>
    <link>https://community.esri.com/t5/python-questions/versioned-data-multiple-updatecursors-runtimeerror/m-p/1043896#M60671</link>
    <description>&lt;P&gt;So after moving my edit start and stop sessions to every conceivable combination, I decided to take a look at the custom cursor module again since it starts and stops for me.&amp;nbsp; After some research, I found some changes to the cursor module.&amp;nbsp; Well, lo and behold, I got my code working again.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks all for your help!&lt;/P&gt;&lt;P&gt;Code for UpdateCursor Module:&lt;/P&gt;&lt;PRE&gt;&lt;SPAN&gt;# for python 2.7&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;arcpy&lt;BR /&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;os&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;find_ws&lt;/SPAN&gt;(path&lt;SPAN&gt;, &lt;/SPAN&gt;ws_type=&lt;SPAN&gt;''):&lt;/SPAN&gt;&lt;BR /&gt;    &lt;SPAN&gt;"""finds a valid workspace path for an arcpy.da.Editor() Session&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    Required:&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        path -- path to features or workspace&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    Optional:&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        ws_type -- option to find specific workspace type (FileSystem|LocalDatabase|RemoteDatabase)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    """&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;# try original path first&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;if &lt;/SPAN&gt;os.sep &lt;SPAN&gt;not in &lt;/SPAN&gt;path:&lt;BR /&gt;        path = arcpy.Describe(path).catalogPath&lt;BR /&gt;    desc = arcpy.Describe(path)&lt;BR /&gt;    &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;hasattr&lt;/SPAN&gt;(desc&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'workspaceType'):&lt;/SPAN&gt;&lt;BR /&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;ws_type &lt;SPAN&gt;and &lt;/SPAN&gt;ws_type == desc.workspaceType:&lt;BR /&gt;            &lt;SPAN&gt;return &lt;/SPAN&gt;path&lt;BR /&gt;        &lt;SPAN&gt;elif not &lt;/SPAN&gt;ws_type:&lt;BR /&gt;            &lt;SPAN&gt;return &lt;/SPAN&gt;path&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;# search until finding a valid workspace&lt;BR /&gt;&lt;/SPAN&gt;    SPLIT = &lt;SPAN&gt;filter&lt;/SPAN&gt;(&lt;SPAN&gt;None&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;path.split(os.sep))&lt;BR /&gt;    &lt;SPAN&gt;if &lt;/SPAN&gt;path.startswith(&lt;SPAN&gt;'&lt;/SPAN&gt;&lt;SPAN&gt;\\\\&lt;/SPAN&gt;&lt;SPAN&gt;'):&lt;/SPAN&gt;&lt;BR /&gt;        SPLIT[&lt;SPAN&gt;0&lt;/SPAN&gt;] = &lt;SPAN&gt;r'\\{0}'&lt;/SPAN&gt;.format(SPLIT[&lt;SPAN&gt;0&lt;/SPAN&gt;])&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;# find valid workspace&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;for &lt;/SPAN&gt;i &lt;SPAN&gt;in &lt;/SPAN&gt;&lt;SPAN&gt;xrange&lt;/SPAN&gt;(&lt;SPAN&gt;1&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;len&lt;/SPAN&gt;(SPLIT)):&lt;BR /&gt;        sub_dir = os.sep.join(SPLIT[:-i])&lt;BR /&gt;        desc = arcpy.Describe(sub_dir)&lt;BR /&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;hasattr&lt;/SPAN&gt;(desc&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'workspaceType'):&lt;/SPAN&gt;&lt;BR /&gt;            &lt;SPAN&gt;if &lt;/SPAN&gt;ws_type &lt;SPAN&gt;and &lt;/SPAN&gt;ws_type == desc.workspaceType:&lt;BR /&gt;                &lt;SPAN&gt;return &lt;/SPAN&gt;sub_dir&lt;BR /&gt;            &lt;SPAN&gt;elif not &lt;/SPAN&gt;ws_type:&lt;BR /&gt;                &lt;SPAN&gt;return &lt;/SPAN&gt;sub_dir&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;class &lt;/SPAN&gt;UpdateCursor(&lt;SPAN&gt;object):&lt;/SPAN&gt;&lt;BR /&gt;    &lt;SPAN&gt;"""wrapper class for arcpy.da.UpdateCursor, to automatically&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    implement editing (required for versioned data, and data with&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    geometric networks, topologies, network datasets, and relationship&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    classes"""&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;__init__&lt;/SPAN&gt;(&lt;SPAN&gt;self&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;*args&lt;SPAN&gt;, &lt;/SPAN&gt;**kwargs):&lt;BR /&gt;        &lt;SPAN&gt;"""initiate wrapper class for update cursor.  Supported args:&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        in_table, field_names, where_clause=None, spatial_reference=None,&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        explode_to_points=False, sql_clause=(None, None)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        """&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;self&lt;/SPAN&gt;.args = args&lt;BR /&gt;        &lt;SPAN&gt;self&lt;/SPAN&gt;.kwargs = kwargs&lt;BR /&gt;        &lt;SPAN&gt;self&lt;/SPAN&gt;.edit = &lt;SPAN&gt;None&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;__enter__&lt;/SPAN&gt;(&lt;SPAN&gt;self):&lt;/SPAN&gt;&lt;BR /&gt;        ws = &lt;SPAN&gt;None&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;self&lt;/SPAN&gt;.args:&lt;BR /&gt;            ws = find_ws(&lt;SPAN&gt;self&lt;/SPAN&gt;.args[&lt;SPAN&gt;0&lt;/SPAN&gt;])&lt;BR /&gt;        &lt;SPAN&gt;elif &lt;/SPAN&gt;&lt;SPAN&gt;'in_table' &lt;/SPAN&gt;&lt;SPAN&gt;in &lt;/SPAN&gt;&lt;SPAN&gt;self&lt;/SPAN&gt;.kwargs:&lt;BR /&gt;            ws = find_ws(&lt;SPAN&gt;self&lt;/SPAN&gt;.kwargs[&lt;SPAN&gt;'in_table'&lt;/SPAN&gt;])&lt;BR /&gt;        &lt;SPAN&gt;self&lt;/SPAN&gt;.edit = arcpy.da.Editor(ws)&lt;BR /&gt;        &lt;SPAN&gt;self&lt;/SPAN&gt;.edit.startEditing()&lt;BR /&gt;        &lt;SPAN&gt;self&lt;/SPAN&gt;.edit.startOperation()&lt;BR /&gt;        &lt;SPAN&gt;return &lt;/SPAN&gt;arcpy.da.UpdateCursor(*&lt;SPAN&gt;self&lt;/SPAN&gt;.args&lt;SPAN&gt;, &lt;/SPAN&gt;**&lt;SPAN&gt;self&lt;/SPAN&gt;.kwargs)&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;__exit__&lt;/SPAN&gt;(&lt;SPAN&gt;self&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;type&lt;SPAN&gt;, &lt;/SPAN&gt;value&lt;SPAN&gt;, &lt;/SPAN&gt;traceback):&lt;BR /&gt;        &lt;SPAN&gt;self&lt;/SPAN&gt;.edit.stopOperation()&lt;BR /&gt;        &lt;SPAN&gt;self&lt;/SPAN&gt;.edit.stopEditing(&lt;SPAN&gt;True&lt;/SPAN&gt;)&lt;BR /&gt;        &lt;SPAN&gt;self&lt;/SPAN&gt;.edit = &lt;SPAN&gt;None&lt;/SPAN&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;And my code :&lt;/P&gt;&lt;PRE&gt;&lt;SPAN&gt;# works for python2.7&lt;BR /&gt;import arcpy&lt;BR /&gt;import datetime&lt;BR /&gt;import cursors&lt;BR /&gt;&lt;BR /&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;calcNorthing&lt;/SPAN&gt;():&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;#  calculate northing&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        # edit.startEditing(False, True)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        # edit.startOperation()&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;'Northing' &lt;/SPAN&gt;&lt;SPAN&gt;not in &lt;/SPAN&gt;lstFields:&lt;BR /&gt;            arcpy.AddField_management(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Northing"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"DOUBLE"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;# edit.stopOperation(True)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        # edit.stopEditing()&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Calculating Northing Field"&lt;/SPAN&gt;)&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Calculating Northing Field"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;with &lt;/SPAN&gt;cursors.UpdateCursor(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;[&lt;SPAN&gt;'Northing'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'Shape@'&lt;/SPAN&gt;]&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Northing IS NULL"&lt;/SPAN&gt;) &lt;SPAN&gt;as &lt;/SPAN&gt;cursor:&lt;BR /&gt;            &lt;SPAN&gt;for &lt;/SPAN&gt;row &lt;SPAN&gt;in &lt;/SPAN&gt;cursor:&lt;BR /&gt;                &lt;SPAN&gt;if &lt;/SPAN&gt;row[&lt;SPAN&gt;1&lt;/SPAN&gt;] &lt;SPAN&gt;is not &lt;/SPAN&gt;&lt;SPAN&gt;None&lt;/SPAN&gt;:&lt;BR /&gt;                    pt = row[&lt;SPAN&gt;1&lt;/SPAN&gt;].projectAs(&lt;SPAN&gt;'2236'&lt;/SPAN&gt;).centroid&lt;BR /&gt;                    row[&lt;SPAN&gt;0&lt;/SPAN&gt;] = &lt;SPAN&gt;round&lt;/SPAN&gt;(pt.Y&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;3&lt;/SPAN&gt;)&lt;BR /&gt;                cursor.updateRow(row)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Completed Northing calculation"&lt;/SPAN&gt;)&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Completed Northing calculation"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;except&lt;/SPAN&gt;():&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Failed Northing calculation."&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;calcEasting&lt;/SPAN&gt;():&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;#  calculate easting&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;'Easting' &lt;/SPAN&gt;&lt;SPAN&gt;not in &lt;/SPAN&gt;lstFields:&lt;BR /&gt;            arcpy.AddField_management(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Easting"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"DOUBLE"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Calculating Easting Field"&lt;/SPAN&gt;)&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Calculating Easting Field"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;with &lt;/SPAN&gt;cursors.UpdateCursor(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;[&lt;SPAN&gt;'Easting'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'Shape@'&lt;/SPAN&gt;]&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Easting IS NULL"&lt;/SPAN&gt;) &lt;SPAN&gt;as &lt;/SPAN&gt;cursor:&lt;BR /&gt;            &lt;SPAN&gt;for &lt;/SPAN&gt;row &lt;SPAN&gt;in &lt;/SPAN&gt;cursor:&lt;BR /&gt;                &lt;SPAN&gt;if &lt;/SPAN&gt;row[&lt;SPAN&gt;1&lt;/SPAN&gt;] &lt;SPAN&gt;is not &lt;/SPAN&gt;&lt;SPAN&gt;None&lt;/SPAN&gt;:&lt;BR /&gt;                    pt = row[&lt;SPAN&gt;1&lt;/SPAN&gt;].projectAs(&lt;SPAN&gt;'2236'&lt;/SPAN&gt;).centroid&lt;BR /&gt;                    row[&lt;SPAN&gt;0&lt;/SPAN&gt;] = &lt;SPAN&gt;round&lt;/SPAN&gt;(pt.X&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;3&lt;/SPAN&gt;)&lt;BR /&gt;                cursor.updateRow(row)&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;except&lt;/SPAN&gt;():&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Failed Easting calculation."&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;finally&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Completed Easting calculation"&lt;/SPAN&gt;)&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Completed Easting calculation"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;calcLongitude&lt;/SPAN&gt;():&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;#  calculate longitude&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;'Longitude' &lt;/SPAN&gt;&lt;SPAN&gt;not in &lt;/SPAN&gt;lstFields:&lt;BR /&gt;            arcpy.AddField_management(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Longitude"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"DOUBLE"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Calculating Longitude Field"&lt;/SPAN&gt;)&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Calculating Longitude Field"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;with &lt;/SPAN&gt;cursors.UpdateCursor(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;[&lt;SPAN&gt;'Longitude'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'Shape@'&lt;/SPAN&gt;]&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Longitude IS NULL or Longitude &amp;lt; -82"&lt;/SPAN&gt;) &lt;SPAN&gt;as &lt;/SPAN&gt;cursor:&lt;BR /&gt;            &lt;SPAN&gt;for &lt;/SPAN&gt;row &lt;SPAN&gt;in &lt;/SPAN&gt;cursor:&lt;BR /&gt;                &lt;SPAN&gt;if &lt;/SPAN&gt;row[&lt;SPAN&gt;1&lt;/SPAN&gt;] &lt;SPAN&gt;is not &lt;/SPAN&gt;&lt;SPAN&gt;None&lt;/SPAN&gt;:&lt;BR /&gt;                    pt = row[&lt;SPAN&gt;1&lt;/SPAN&gt;].projectAs(&lt;SPAN&gt;'4326'&lt;/SPAN&gt;).centroid&lt;BR /&gt;                    row[&lt;SPAN&gt;0&lt;/SPAN&gt;] = &lt;SPAN&gt;round&lt;/SPAN&gt;(pt.X&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;6&lt;/SPAN&gt;)&lt;BR /&gt;                cursor.updateRow(row)&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;finally&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Completed Longitude calculation"&lt;/SPAN&gt;)&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Completed Longitude calculation"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;calcLatitude&lt;/SPAN&gt;():&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;#  calculate latitude&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;'Latitude' &lt;/SPAN&gt;&lt;SPAN&gt;not in &lt;/SPAN&gt;lstFields:&lt;BR /&gt;            arcpy.AddField_management(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Latitude"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"DOUBLE"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Calculating Latitude Field"&lt;/SPAN&gt;)&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Calculating Latitude Field"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;with &lt;/SPAN&gt;cursors.UpdateCursor(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;[&lt;SPAN&gt;'Latitude'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'Shape@'&lt;/SPAN&gt;]&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Latitude IS NULL or Latitude &amp;lt; 0"&lt;/SPAN&gt;) &lt;SPAN&gt;as &lt;/SPAN&gt;cursor:&lt;BR /&gt;            &lt;SPAN&gt;for &lt;/SPAN&gt;row &lt;SPAN&gt;in &lt;/SPAN&gt;cursor:&lt;BR /&gt;                &lt;SPAN&gt;if &lt;/SPAN&gt;row[&lt;SPAN&gt;1&lt;/SPAN&gt;] &lt;SPAN&gt;is not &lt;/SPAN&gt;&lt;SPAN&gt;None&lt;/SPAN&gt;:&lt;BR /&gt;                    pt = row[&lt;SPAN&gt;1&lt;/SPAN&gt;].projectAs(&lt;SPAN&gt;'4326'&lt;/SPAN&gt;).centroid&lt;BR /&gt;                    row[&lt;SPAN&gt;0&lt;/SPAN&gt;] = &lt;SPAN&gt;round&lt;/SPAN&gt;(pt.Y&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;6&lt;/SPAN&gt;)&lt;BR /&gt;                cursor.updateRow(row)&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;finally&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Completed Latitude calculation"&lt;/SPAN&gt;)&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Completed Latitude calculation"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;calcSLOCSEQ&lt;/SPAN&gt;():&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;#  calculate  SERVICE_LOC_SEQ&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;'S_LOC_SEQ' &lt;/SPAN&gt;&lt;SPAN&gt;in &lt;/SPAN&gt;lstFields:&lt;BR /&gt;            &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Calculating SERVICE_LOC_SEQ"&lt;/SPAN&gt;)&lt;BR /&gt;            arcpy.AddMessage(&lt;SPAN&gt;"Calculating SERVICE_LOC_SEQ"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;            &lt;SPAN&gt;with &lt;/SPAN&gt;cursors.UpdateCursor(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;[&lt;SPAN&gt;'S_LOC_SEQ'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'METER_NUMB'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'OBJECTID'&lt;/SPAN&gt;]&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'S_LOC_SEQ IS NULL'&lt;/SPAN&gt;) &lt;SPAN&gt;as &lt;/SPAN&gt;cursor:&lt;BR /&gt;                &lt;SPAN&gt;for &lt;/SPAN&gt;row &lt;SPAN&gt;in &lt;/SPAN&gt;cursor:&lt;BR /&gt;                    &lt;SPAN&gt;if &lt;/SPAN&gt;row[&lt;SPAN&gt;1&lt;/SPAN&gt;] &lt;SPAN&gt;is &lt;/SPAN&gt;&lt;SPAN&gt;None&lt;/SPAN&gt;:&lt;BR /&gt;                        &lt;SPAN&gt;print &lt;/SPAN&gt;(&lt;SPAN&gt;"OBJECTID #{} has no meter number"&lt;/SPAN&gt;.format(row[&lt;SPAN&gt;2&lt;/SPAN&gt;]))&lt;BR /&gt;                    &lt;SPAN&gt;elif &lt;/SPAN&gt;row[&lt;SPAN&gt;1&lt;/SPAN&gt;].isnumeric():&lt;BR /&gt;                        row[&lt;SPAN&gt;0&lt;/SPAN&gt;] = row[&lt;SPAN&gt;1&lt;/SPAN&gt;]&lt;BR /&gt;                        &lt;SPAN&gt;#  row[7] = datetime.datetime.now()&lt;BR /&gt;&lt;/SPAN&gt;                    &lt;SPAN&gt;elif not &lt;/SPAN&gt;row[&lt;SPAN&gt;1&lt;/SPAN&gt;].isnumeric():&lt;BR /&gt;                        &lt;SPAN&gt;print &lt;/SPAN&gt;(&lt;SPAN&gt;"Could not calculate OBJECTID #{}. Check for a bad number."&lt;/SPAN&gt;.format(row[&lt;SPAN&gt;2&lt;/SPAN&gt;]))&lt;BR /&gt;                    cursor.updateRow(row)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;else&lt;/SPAN&gt;:&lt;BR /&gt;            &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Field does not exist."&lt;/SPAN&gt;)&lt;BR /&gt;            arcpy.AddMessage(&lt;SPAN&gt;"Field does not exist. No calculation performed."&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;finally&lt;/SPAN&gt;:&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Completed SERVICE_LOC_SEQ calculation"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;calcDuplicates&lt;/SPAN&gt;():&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;'METER_NUMB' &lt;/SPAN&gt;&lt;SPAN&gt;in &lt;/SPAN&gt;lstFields:&lt;BR /&gt;            arcpy.AddMessage(&lt;SPAN&gt;"Searching for Duplicates. A value more than 1 in the &lt;/SPAN&gt;&lt;SPAN&gt;\"&lt;/SPAN&gt;&lt;SPAN&gt;Point_ID&lt;/SPAN&gt;&lt;SPAN&gt;\"&lt;/SPAN&gt;&lt;SPAN&gt; field represents number of duplicae values"&lt;/SPAN&gt;)&lt;BR /&gt;            infeature = userInput&lt;BR /&gt;            field_in = &lt;SPAN&gt;'METER_NUMB'&lt;BR /&gt;&lt;/SPAN&gt;            field_out = &lt;SPAN&gt;'Point_ID'&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;# creating the list with all the values in the field, including duplicates&lt;BR /&gt;&lt;/SPAN&gt;            lista = []&lt;BR /&gt;            &lt;SPAN&gt;with &lt;/SPAN&gt;arcpy.da.SearchCursor(infeature&lt;SPAN&gt;, &lt;/SPAN&gt;[&lt;SPAN&gt;'METER_NUMB'&lt;/SPAN&gt;]) &lt;SPAN&gt;as &lt;/SPAN&gt;cursor1:&lt;BR /&gt;                &lt;SPAN&gt;for &lt;/SPAN&gt;row &lt;SPAN&gt;in &lt;/SPAN&gt;cursor1:&lt;BR /&gt;                    lista.append(row[&lt;SPAN&gt;0&lt;/SPAN&gt;])&lt;BR /&gt;&lt;BR /&gt;            &lt;SPAN&gt;# updating the count field with the number on occurrences of field_in values&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;            # in the previously created list&lt;BR /&gt;&lt;/SPAN&gt;            cursor2 = arcpy.UpdateCursor(infeature)&lt;BR /&gt;            &lt;SPAN&gt;for &lt;/SPAN&gt;row &lt;SPAN&gt;in &lt;/SPAN&gt;cursor2:&lt;BR /&gt;                i = row.getValue(field_in)&lt;BR /&gt;                occ = lista.count(i)&lt;BR /&gt;                row.setValue(field_out&lt;SPAN&gt;, &lt;/SPAN&gt;occ)&lt;BR /&gt;                cursor2.updateRow(row)&lt;BR /&gt;            &lt;SPAN&gt;del &lt;/SPAN&gt;cursor2&lt;BR /&gt;            &lt;SPAN&gt;del &lt;/SPAN&gt;row&lt;BR /&gt;            &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Done."&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;else&lt;/SPAN&gt;:&lt;BR /&gt;            &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"METER_NUMB field does not exist. No duplicate check performed."&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;except&lt;/SPAN&gt;():&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Calculating duplicate process failed"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;finally&lt;/SPAN&gt;:&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Completed duplicate calculation"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;if &lt;/SPAN&gt;__name__ == &lt;SPAN&gt;'__main__'&lt;/SPAN&gt;:&lt;BR /&gt;&lt;BR /&gt;    startTime = datetime.datetime.now().replace(&lt;SPAN&gt;microsecond&lt;/SPAN&gt;=&lt;SPAN&gt;0&lt;/SPAN&gt;)&lt;BR /&gt;    &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Operation started on {}"&lt;/SPAN&gt;.format(startTime))&lt;BR /&gt;    arcpy.AddMessage(&lt;SPAN&gt;"Operation started on {}"&lt;/SPAN&gt;.format(startTime))&lt;BR /&gt;&lt;BR /&gt;    arcpy.env.overwriteOutput = &lt;SPAN&gt;True&lt;BR /&gt;&lt;/SPAN&gt;    userInput = arcpy.GetParameterAsText(&lt;SPAN&gt;0&lt;/SPAN&gt;)&lt;BR /&gt;    lstFields = [f.name &lt;SPAN&gt;for &lt;/SPAN&gt;f &lt;SPAN&gt;in &lt;/SPAN&gt;arcpy.ListFields(userInput)]&lt;BR /&gt;    workspace = &lt;SPAN&gt;"Database Connections&lt;/SPAN&gt;&lt;SPAN&gt;\\&lt;/SPAN&gt;&lt;SPAN&gt;wGISProd@GISdb.OSA.sde"&lt;BR /&gt;&lt;/SPAN&gt;    edit = arcpy.da.Editor(workspace)&lt;BR /&gt;    calcNorthing()&lt;BR /&gt;    calcEasting()&lt;BR /&gt;    calcLongitude()&lt;BR /&gt;    calcLatitude()&lt;BR /&gt;    calcSLOCSEQ()&lt;BR /&gt;    calcDuplicates()&lt;BR /&gt;    arcpy.SelectLayerByAttribute_management(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"CLEAR_SELECTION"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;    endTime = datetime.datetime.now().replace(&lt;SPAN&gt;microsecond&lt;/SPAN&gt;=&lt;SPAN&gt;0&lt;/SPAN&gt;)&lt;BR /&gt;    dur = endTime - startTime&lt;BR /&gt;    dur = &lt;SPAN&gt;str&lt;/SPAN&gt;(dur)&lt;BR /&gt;    &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;'Duration: {}'&lt;/SPAN&gt;.format(dur))&lt;BR /&gt;    arcpy.AddMessage(&lt;SPAN&gt;'Duration: {}'&lt;/SPAN&gt;.format(dur))&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Mon, 05 Apr 2021 18:01:03 GMT</pubDate>
    <dc:creator>EvanMyers1</dc:creator>
    <dc:date>2021-04-05T18:01:03Z</dc:date>
    <item>
      <title>Versioned Data, multiple UpdateCursors, RuntimeError: The requested operation is invalid on a closed state</title>
      <link>https://community.esri.com/t5/python-questions/versioned-data-multiple-updatecursors-runtimeerror/m-p/1043525#M60642</link>
      <description>&lt;P&gt;Hello everyone,&lt;/P&gt;&lt;P&gt;I am getting&amp;nbsp; the following error after running my script:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="EvanMyers1_0-1617397073937.png" style="width: 400px;"&gt;&lt;img src="https://community.esri.com/t5/image/serverpage/image-id/10021i8B4B1B2733DA84AB/image-size/medium?v=v2&amp;amp;px=400" role="button" title="EvanMyers1_0-1617397073937.png" alt="EvanMyers1_0-1617397073937.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The script runs fine when I am not in a version but once I change it to a version, it breaks after the first UpdateCursor.&amp;nbsp; Note: the imported "cursors" module is from this post:&amp;nbsp; &lt;A href="https://community.esri.com/t5/python-questions/the-requested-operation-is-invalid-on-a-closed-state/m-p/343774" target="_blank"&gt;https://community.esri.com/t5/python-questions/the-requested-operation-is-invalid-on-a-closed-state/m-p/343774&lt;/A&gt;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;arcpy&lt;BR /&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;datetime&lt;BR /&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;cursors&lt;BR /&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;os&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;calcNorthing&lt;/SPAN&gt;():&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;# userInput_Layer = "{}_Layer".format(userInput)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    # arcpy.MakeFeatureLayer_management(userInput, userInput_Layer)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;#  calculate northing&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;'Northing' &lt;/SPAN&gt;&lt;SPAN&gt;not in &lt;/SPAN&gt;lstFields:&lt;BR /&gt;            arcpy.AddField_management(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Northing"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"DOUBLE"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Calculating Northing Field"&lt;/SPAN&gt;)&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Calculating Northing Field"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;with &lt;/SPAN&gt;cursors.UpdateCursor(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;[&lt;SPAN&gt;'Northing'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'Shape@'&lt;/SPAN&gt;]&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Northing IS NULL"&lt;/SPAN&gt;) &lt;SPAN&gt;as &lt;/SPAN&gt;cursor:&lt;BR /&gt;            &lt;SPAN&gt;for &lt;/SPAN&gt;row &lt;SPAN&gt;in &lt;/SPAN&gt;cursor:&lt;BR /&gt;                &lt;SPAN&gt;if &lt;/SPAN&gt;row[&lt;SPAN&gt;1&lt;/SPAN&gt;] &lt;SPAN&gt;is not None&lt;/SPAN&gt;:&lt;BR /&gt;                    pt = row[&lt;SPAN&gt;1&lt;/SPAN&gt;].projectAs(&lt;SPAN&gt;'2236'&lt;/SPAN&gt;).centroid&lt;BR /&gt;                    row[&lt;SPAN&gt;0&lt;/SPAN&gt;] = &lt;SPAN&gt;round&lt;/SPAN&gt;(pt.Y&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;3&lt;/SPAN&gt;)&lt;BR /&gt;                cursor.updateRow(row)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Completed Northing calculation"&lt;/SPAN&gt;)&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Completed Northing calculation"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;# del cursor&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;except&lt;/SPAN&gt;():&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Failed Northing calculation."&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;# finally:&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;calcEasting&lt;/SPAN&gt;():&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;#  calculate easting&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;'Easting' &lt;/SPAN&gt;&lt;SPAN&gt;not in &lt;/SPAN&gt;lstFields:&lt;BR /&gt;            arcpy.AddField_management(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Easting"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"DOUBLE"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Calculating Easting Field"&lt;/SPAN&gt;)&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Calculating Easting Field"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;with &lt;/SPAN&gt;cursors.UpdateCursor(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;[&lt;SPAN&gt;'Easting'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'Shape@'&lt;/SPAN&gt;]&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Easting IS NULL"&lt;/SPAN&gt;) &lt;SPAN&gt;as &lt;/SPAN&gt;cursor:&lt;BR /&gt;            &lt;SPAN&gt;for &lt;/SPAN&gt;row &lt;SPAN&gt;in &lt;/SPAN&gt;cursor:&lt;BR /&gt;                &lt;SPAN&gt;if &lt;/SPAN&gt;row[&lt;SPAN&gt;1&lt;/SPAN&gt;] &lt;SPAN&gt;is not None&lt;/SPAN&gt;:&lt;BR /&gt;                    pt = row[&lt;SPAN&gt;1&lt;/SPAN&gt;].projectAs(&lt;SPAN&gt;'2236'&lt;/SPAN&gt;).centroid&lt;BR /&gt;                    row[&lt;SPAN&gt;0&lt;/SPAN&gt;] = &lt;SPAN&gt;round&lt;/SPAN&gt;(pt.X&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;3&lt;/SPAN&gt;)&lt;BR /&gt;                cursor.updateRow(row)&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;except&lt;/SPAN&gt;():&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Failed Easting calculation."&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;finally&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Completed Easting calculation"&lt;/SPAN&gt;)&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Completed Easting calculation"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;calcLongitude&lt;/SPAN&gt;():&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;#  calculate longitude&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;'Longitude' &lt;/SPAN&gt;&lt;SPAN&gt;not in &lt;/SPAN&gt;lstFields:&lt;BR /&gt;            arcpy.AddField_management(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Longitude"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"DOUBLE"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Calculating Longitude Field"&lt;/SPAN&gt;)&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Calculating Longitude Field"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;with &lt;/SPAN&gt;cursors.UpdateCursor(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;[&lt;SPAN&gt;'Longitude'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'Shape@'&lt;/SPAN&gt;]&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Longitude IS NULL or Longitude &amp;lt; -82"&lt;/SPAN&gt;) &lt;SPAN&gt;as &lt;/SPAN&gt;cursor:&lt;BR /&gt;            &lt;SPAN&gt;for &lt;/SPAN&gt;row &lt;SPAN&gt;in &lt;/SPAN&gt;cursor:&lt;BR /&gt;                &lt;SPAN&gt;if &lt;/SPAN&gt;row[&lt;SPAN&gt;1&lt;/SPAN&gt;] &lt;SPAN&gt;is not None&lt;/SPAN&gt;:&lt;BR /&gt;                    pt = row[&lt;SPAN&gt;1&lt;/SPAN&gt;].projectAs(&lt;SPAN&gt;'4326'&lt;/SPAN&gt;).centroid&lt;BR /&gt;                    row[&lt;SPAN&gt;0&lt;/SPAN&gt;] = &lt;SPAN&gt;round&lt;/SPAN&gt;(pt.X&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;6&lt;/SPAN&gt;)&lt;BR /&gt;                cursor.updateRow(row)&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;finally&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Completed Longitude calculation"&lt;/SPAN&gt;)&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Completed Longitude calculation"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;calcLatitude&lt;/SPAN&gt;():&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;#  calculate latitude&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;'Latitude' &lt;/SPAN&gt;&lt;SPAN&gt;not in &lt;/SPAN&gt;lstFields:&lt;BR /&gt;            arcpy.AddField_management(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Latitude"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"DOUBLE"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Calculating Latitude Field"&lt;/SPAN&gt;)&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Calculating Latitude Field"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;with &lt;/SPAN&gt;cursors.UpdateCursor(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;[&lt;SPAN&gt;'Latitude'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'Shape@'&lt;/SPAN&gt;]&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Latitude IS NULL or Latitude &amp;lt; 0"&lt;/SPAN&gt;) &lt;SPAN&gt;as &lt;/SPAN&gt;cursor:&lt;BR /&gt;            &lt;SPAN&gt;for &lt;/SPAN&gt;row &lt;SPAN&gt;in &lt;/SPAN&gt;cursor:&lt;BR /&gt;                &lt;SPAN&gt;if &lt;/SPAN&gt;row[&lt;SPAN&gt;1&lt;/SPAN&gt;] &lt;SPAN&gt;is not None&lt;/SPAN&gt;:&lt;BR /&gt;                    pt = row[&lt;SPAN&gt;1&lt;/SPAN&gt;].projectAs(&lt;SPAN&gt;'4326'&lt;/SPAN&gt;).centroid&lt;BR /&gt;                    row[&lt;SPAN&gt;0&lt;/SPAN&gt;] = &lt;SPAN&gt;round&lt;/SPAN&gt;(pt.Y&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;6&lt;/SPAN&gt;)&lt;BR /&gt;                cursor.updateRow(row)&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;finally&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Completed Latitude calculation"&lt;/SPAN&gt;)&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Completed Latitude calculation"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;calcSLOCSEQ&lt;/SPAN&gt;():&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;#  calculate  SERVICE_LOC_SEQ&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;'S_LOC_SEQ' &lt;/SPAN&gt;&lt;SPAN&gt;in &lt;/SPAN&gt;lstFields:&lt;BR /&gt;            &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Calculating SERVICE_LOC_SEQ"&lt;/SPAN&gt;)&lt;BR /&gt;            arcpy.AddMessage(&lt;SPAN&gt;"Calculating SERVICE_LOC_SEQ"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;            &lt;SPAN&gt;with &lt;/SPAN&gt;cursors.UpdateCursor(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;[&lt;SPAN&gt;'S_LOC_SEQ'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'METER_NUMB'&lt;/SPAN&gt;]) &lt;SPAN&gt;as &lt;/SPAN&gt;cursor:&lt;BR /&gt;                &lt;SPAN&gt;for &lt;/SPAN&gt;row &lt;SPAN&gt;in &lt;/SPAN&gt;cursor:&lt;BR /&gt;                    &lt;SPAN&gt;if &lt;/SPAN&gt;row[&lt;SPAN&gt;1&lt;/SPAN&gt;] &lt;SPAN&gt;is None&lt;/SPAN&gt;:&lt;BR /&gt;                        &lt;SPAN&gt;print &lt;/SPAN&gt;(&lt;SPAN&gt;"Bad value"&lt;/SPAN&gt;)&lt;BR /&gt;                    &lt;SPAN&gt;elif &lt;/SPAN&gt;row[&lt;SPAN&gt;1&lt;/SPAN&gt;].isnumeric():&lt;BR /&gt;                        row[&lt;SPAN&gt;0&lt;/SPAN&gt;] = row[&lt;SPAN&gt;1&lt;/SPAN&gt;]&lt;BR /&gt;                        &lt;SPAN&gt;#  row[7] = datetime.datetime.now()&lt;BR /&gt;&lt;/SPAN&gt;                    cursor.updateRow(row)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;else&lt;/SPAN&gt;:&lt;BR /&gt;            &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Field does not exist."&lt;/SPAN&gt;)&lt;BR /&gt;            arcpy.AddMessage(&lt;SPAN&gt;"Field does not exist. No calculation performed."&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;finally&lt;/SPAN&gt;:&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Completed SERVICE_LOC_SEQ calculation"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;calcDuplicates&lt;/SPAN&gt;():&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;'METER_NUMB' &lt;/SPAN&gt;&lt;SPAN&gt;in &lt;/SPAN&gt;lstFields:&lt;BR /&gt;            arcpy.AddMessage(&lt;SPAN&gt;"Searching for Duplicates. A value more than 1 in the &lt;/SPAN&gt;&lt;SPAN&gt;\"&lt;/SPAN&gt;&lt;SPAN&gt;Point_ID&lt;/SPAN&gt;&lt;SPAN&gt;\"&lt;/SPAN&gt;&lt;SPAN&gt; field represents number of duplicae values"&lt;/SPAN&gt;)&lt;BR /&gt;            infeature = userInput&lt;BR /&gt;            field_in = &lt;SPAN&gt;'METER_NUMB'&lt;BR /&gt;&lt;/SPAN&gt;            field_out = &lt;SPAN&gt;'Point_ID'&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;# creating the list with all the values in the field, including duplicates&lt;BR /&gt;&lt;/SPAN&gt;            lista = []&lt;BR /&gt;            &lt;SPAN&gt;with &lt;/SPAN&gt;arcpy.da.SearchCursor(infeature&lt;SPAN&gt;, &lt;/SPAN&gt;[&lt;SPAN&gt;'METER_NUMB'&lt;/SPAN&gt;]) &lt;SPAN&gt;as &lt;/SPAN&gt;cursor1:&lt;BR /&gt;                &lt;SPAN&gt;for &lt;/SPAN&gt;row &lt;SPAN&gt;in &lt;/SPAN&gt;cursor1:&lt;BR /&gt;                    lista.append(row[&lt;SPAN&gt;0&lt;/SPAN&gt;])&lt;BR /&gt;&lt;BR /&gt;            &lt;SPAN&gt;# updating the count field with the number on occurrences of field_in values&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;            # in the previously created list&lt;BR /&gt;&lt;/SPAN&gt;            cursor2 = arcpy.UpdateCursor(infeature)&lt;BR /&gt;            &lt;SPAN&gt;for &lt;/SPAN&gt;row &lt;SPAN&gt;in &lt;/SPAN&gt;cursor2:&lt;BR /&gt;                i = row.getValue(field_in)&lt;BR /&gt;                occ = lista.count(i)&lt;BR /&gt;                row.setValue(field_out&lt;SPAN&gt;, &lt;/SPAN&gt;occ)&lt;BR /&gt;                cursor2.updateRow(row)&lt;BR /&gt;            &lt;SPAN&gt;del &lt;/SPAN&gt;cursor2&lt;BR /&gt;            &lt;SPAN&gt;del &lt;/SPAN&gt;row&lt;BR /&gt;            &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Done."&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;else&lt;/SPAN&gt;:&lt;BR /&gt;            &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"METER_NUMB field does not exist. No duplicate check performed."&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;except&lt;/SPAN&gt;():&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Calculating duplicate process failed"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;finally&lt;/SPAN&gt;:&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Completed duplicate calculation"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;if &lt;/SPAN&gt;__name__ == &lt;SPAN&gt;'__main__'&lt;/SPAN&gt;:&lt;BR /&gt;&lt;BR /&gt;    startTime = datetime.datetime.now().replace(&lt;SPAN&gt;microsecond&lt;/SPAN&gt;=&lt;SPAN&gt;0&lt;/SPAN&gt;)&lt;BR /&gt;    &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Operation started on {}"&lt;/SPAN&gt;.format(startTime))&lt;BR /&gt;    arcpy.AddMessage(&lt;SPAN&gt;"Operation started on {}"&lt;/SPAN&gt;.format(startTime))&lt;BR /&gt;&lt;BR /&gt;    arcpy.env.overwriteOutput = &lt;SPAN&gt;True&lt;BR /&gt;&lt;/SPAN&gt;    userInput = arcpy.GetParameterAsText(&lt;SPAN&gt;0&lt;/SPAN&gt;)  #point data here&lt;BR /&gt;    lstFields = [f.name &lt;SPAN&gt;for &lt;/SPAN&gt;f &lt;SPAN&gt;in &lt;/SPAN&gt;arcpy.ListFields(userInput)]&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    calcNorthing()&lt;BR /&gt;    calcEasting()&lt;BR /&gt;    calcLongitude()&lt;BR /&gt;    calcLatitude()&lt;BR /&gt;    calcSLOCSEQ()&lt;BR /&gt;    calcDuplicates()&lt;BR /&gt;    arcpy.SelectLayerByAttribute_management(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"CLEAR_SELECTION"&lt;/SPAN&gt;)  #attempt to refresh table&lt;BR /&gt;&lt;BR /&gt;    endTime = datetime.datetime.now().replace(&lt;SPAN&gt;microsecond&lt;/SPAN&gt;=&lt;SPAN&gt;0&lt;/SPAN&gt;)&lt;BR /&gt;    dur = endTime - startTime&lt;BR /&gt;    dur = &lt;SPAN&gt;str&lt;/SPAN&gt;(dur)&lt;BR /&gt;    &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;'Duration: {}'&lt;/SPAN&gt;.format(dur))&lt;BR /&gt;    arcpy.AddMessage(&lt;SPAN&gt;'Duration: {}'&lt;/SPAN&gt;.format(dur))&lt;BR /&gt;&lt;BR /&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 02 Apr 2021 21:02:42 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/versioned-data-multiple-updatecursors-runtimeerror/m-p/1043525#M60642</guid>
      <dc:creator>EvanMyers1</dc:creator>
      <dc:date>2021-04-02T21:02:42Z</dc:date>
    </item>
    <item>
      <title>Re: Versioned Data, multiple UpdateCursors, RuntimeError: The requested operation is invalid on a closed state</title>
      <link>https://community.esri.com/t5/python-questions/versioned-data-multiple-updatecursors-runtimeerror/m-p/1043529#M60643</link>
      <description>&lt;P&gt;you tried the stopediting(true) then starting editing again as per the post?&amp;nbsp; I have seen some issues using the 'with' statement also, perhaps try the cursors without that.&amp;nbsp; unaware of the cursors module bit will have a look.&lt;/P&gt;</description>
      <pubDate>Fri, 02 Apr 2021 21:08:05 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/versioned-data-multiple-updatecursors-runtimeerror/m-p/1043529#M60643</guid>
      <dc:creator>DavidPike</dc:creator>
      <dc:date>2021-04-02T21:08:05Z</dc:date>
    </item>
    <item>
      <title>Re: Versioned Data, multiple UpdateCursors, RuntimeError: The requested operation is invalid on a closed state</title>
      <link>https://community.esri.com/t5/python-questions/versioned-data-multiple-updatecursors-runtimeerror/m-p/1043548#M60644</link>
      <description>&lt;P&gt;I'm not familiar with importing the cursors module. Instead I suggest you use the &lt;A href="https://pro.arcgis.com/en/pro-app/latest/arcpy/functions/updatecursor.htm" target="_self"&gt;da.UpdateCursor.&lt;/A&gt;&lt;/P&gt;&lt;P&gt;When editing an enterprise geodatabase (aka SDE), you need to start an edit session and close it it as well:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="python"&gt;ws = r'X:\some\path\to\your\enterprise.gdb'

edit = arcpy.da.Editor(ws)
edit.startEditing(False,False)  #see the documentation on the parameters
edit.startOperation()
with arcpy.da.UpdateCursor(blah, blah bla) as cursor:
    for row in cursor:
        blah blah blah
        cursor.updateRow(row)
edit.stopOperation()
edit.stopEditing(True)&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;a href="https://community.esri.com/t5/user/viewprofilepage/user-id/167692"&gt;@DavidPike&lt;/a&gt;&amp;nbsp;, using 'with' in any da cursor is traditionally the way to go; I've used that approach hundreds of times without an issue...&lt;/P&gt;</description>
      <pubDate>Fri, 02 Apr 2021 22:00:26 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/versioned-data-multiple-updatecursors-runtimeerror/m-p/1043548#M60644</guid>
      <dc:creator>JoeBorgione</dc:creator>
      <dc:date>2021-04-02T22:00:26Z</dc:date>
    </item>
    <item>
      <title>Re: Versioned Data, multiple UpdateCursors, RuntimeError: The requested operation is invalid on a closed state</title>
      <link>https://community.esri.com/t5/python-questions/versioned-data-multiple-updatecursors-runtimeerror/m-p/1043580#M60647</link>
      <description>&lt;P&gt;Sure, I just remember seeing something about it before rather than from experience.&amp;nbsp; More of a lead or something to try at least.&amp;nbsp; When you bring in enterprise GDBs into the equation, this may be an underlying database you've not dealt with before.&amp;nbsp; Although you'd hope the SDE interactions would be the same across all of them, Esri isn't without its 'quirks' surely?&lt;/P&gt;</description>
      <pubDate>Sat, 03 Apr 2021 11:30:12 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/versioned-data-multiple-updatecursors-runtimeerror/m-p/1043580#M60647</guid>
      <dc:creator>DavidPike</dc:creator>
      <dc:date>2021-04-03T11:30:12Z</dc:date>
    </item>
    <item>
      <title>Re: Versioned Data, multiple UpdateCursors, RuntimeError: The requested operation is invalid on a closed state</title>
      <link>https://community.esri.com/t5/python-questions/versioned-data-multiple-updatecursors-runtimeerror/m-p/1043770#M60667</link>
      <description>&lt;P&gt;So maybe I am misunderstanding something about edit sessions within functions.&amp;nbsp; Right now I tried testing it like this but I now get this error:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="EvanMyers1_0-1617628600968.png" style="width: 400px;"&gt;&lt;img src="https://community.esri.com/t5/image/serverpage/image-id/10083i11BFC5910785E5A8/image-size/medium?v=v2&amp;amp;px=400" role="button" title="EvanMyers1_0-1617628600968.png" alt="EvanMyers1_0-1617628600968.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;calcNorthing&lt;/SPAN&gt;():&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;#  calculate northing&lt;BR /&gt;&lt;/SPAN&gt;        edit.startEditing(&lt;SPAN&gt;False, True&lt;/SPAN&gt;)&lt;BR /&gt;        edit.startOperation()&lt;BR /&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;'Northing' &lt;/SPAN&gt;&lt;SPAN&gt;not in &lt;/SPAN&gt;lstFields:&lt;BR /&gt;            arcpy.AddField_management(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Northing"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"DOUBLE"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Calculating Northing Field"&lt;/SPAN&gt;)&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Calculating Northing Field"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;with &lt;/SPAN&gt;arcpy.da.UpdateCursor(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;[&lt;SPAN&gt;'Northing'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'Shape@'&lt;/SPAN&gt;]&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Northing IS NULL"&lt;/SPAN&gt;) &lt;SPAN&gt;as &lt;/SPAN&gt;cursor:&lt;BR /&gt;            &lt;SPAN&gt;for &lt;/SPAN&gt;row &lt;SPAN&gt;in &lt;/SPAN&gt;cursor:&lt;BR /&gt;                &lt;SPAN&gt;if &lt;/SPAN&gt;row[&lt;SPAN&gt;1&lt;/SPAN&gt;] &lt;SPAN&gt;is not None&lt;/SPAN&gt;:&lt;BR /&gt;                    pt = row[&lt;SPAN&gt;1&lt;/SPAN&gt;].projectAs(&lt;SPAN&gt;'2236'&lt;/SPAN&gt;).centroid&lt;BR /&gt;                    row[&lt;SPAN&gt;0&lt;/SPAN&gt;] = &lt;SPAN&gt;round&lt;/SPAN&gt;(pt.Y&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;3&lt;/SPAN&gt;)&lt;BR /&gt;                cursor.updateRow(row)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Completed Northing calculation"&lt;/SPAN&gt;)&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Completed Northing calculation"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        edit.stopOperation()&lt;BR /&gt;        edit.stopEditing(True)&lt;BR /&gt;        &lt;SPAN&gt;# del cursor&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;except&lt;/SPAN&gt;():&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Failed Northing calculation."&lt;/SPAN&gt;)&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;if &lt;/SPAN&gt;__name__ == &lt;SPAN&gt;'__main__'&lt;/SPAN&gt;:&lt;BR /&gt;&lt;BR /&gt;    startTime = datetime.datetime.now().replace(&lt;SPAN&gt;microsecond&lt;/SPAN&gt;=&lt;SPAN&gt;0&lt;/SPAN&gt;)&lt;BR /&gt;    &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Operation started on {}"&lt;/SPAN&gt;.format(startTime))&lt;BR /&gt;    arcpy.AddMessage(&lt;SPAN&gt;"Operation started on {}"&lt;/SPAN&gt;.format(startTime))&lt;BR /&gt;&lt;BR /&gt;    arcpy.env.overwriteOutput = &lt;SPAN&gt;True&lt;BR /&gt;&lt;/SPAN&gt;    userInput = arcpy.GetParameterAsText(&lt;SPAN&gt;0&lt;/SPAN&gt;)&lt;BR /&gt;    lstFields = [f.name &lt;SPAN&gt;for &lt;/SPAN&gt;f &lt;SPAN&gt;in &lt;/SPAN&gt;arcpy.ListFields(userInput)]&lt;BR /&gt;    workspace = &lt;SPAN&gt;"Database Connections&lt;/SPAN&gt;&lt;SPAN&gt;\\&lt;/SPAN&gt;&lt;SPAN&gt;wGISProd@GISdb.OSA.sde"&lt;BR /&gt;&lt;/SPAN&gt;    edit = arcpy.da.Editor(workspace)&lt;BR /&gt;    &lt;SPAN&gt;# edit.startEditing(False, True)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    # edit.startOperation()&lt;BR /&gt;&lt;/SPAN&gt;    calcNorthing()&lt;BR /&gt;    # calcEasting()&lt;BR /&gt;    # calcLongitude()&lt;BR /&gt;    # calcLatitude()&lt;BR /&gt;    # calcSLOCSEQ()&lt;BR /&gt;    # calcDuplicates()&lt;BR /&gt;    arcpy.SelectLayerByAttribute_management(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"CLEAR_SELECTION"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;    endTime = datetime.datetime.now().replace(&lt;SPAN&gt;microsecond&lt;/SPAN&gt;=&lt;SPAN&gt;0&lt;/SPAN&gt;)&lt;BR /&gt;    dur = endTime - startTime&lt;BR /&gt;    dur = &lt;SPAN&gt;str&lt;/SPAN&gt;(dur)&lt;BR /&gt;    &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;'Duration: {}'&lt;/SPAN&gt;.format(dur))&lt;BR /&gt;    arcpy.AddMessage(&lt;SPAN&gt;'Duration: {}'&lt;/SPAN&gt;.format(dur))&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 05 Apr 2021 13:20:26 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/versioned-data-multiple-updatecursors-runtimeerror/m-p/1043770#M60667</guid>
      <dc:creator>EvanMyers1</dc:creator>
      <dc:date>2021-04-05T13:20:26Z</dc:date>
    </item>
    <item>
      <title>Re: Versioned Data, multiple UpdateCursors, RuntimeError: The requested operation is invalid on a closed state</title>
      <link>https://community.esri.com/t5/python-questions/versioned-data-multiple-updatecursors-runtimeerror/m-p/1043783#M60668</link>
      <description>&lt;P&gt;The only thing I can think of is perhaps make your edit calls outside of the try/except block:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="python"&gt;def calcNorthing():
    edit.StartEditing(False,True)
    edit.startOperation()
    try:
       do your thing
    except:
        trap the exception
    edit.stopOperation()
    edit.stopEditing(True)&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;You could also check the edit status in main() to be sure if it's stopped or not before making the call to your function.&lt;/P&gt;&lt;P&gt;Take a look &lt;A href="https://support.esri.com/en/technical-article/000019111" target="_self"&gt;at this too&lt;/A&gt;..&lt;/P&gt;</description>
      <pubDate>Mon, 05 Apr 2021 14:24:18 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/versioned-data-multiple-updatecursors-runtimeerror/m-p/1043783#M60668</guid>
      <dc:creator>JoeBorgione</dc:creator>
      <dc:date>2021-04-05T14:24:18Z</dc:date>
    </item>
    <item>
      <title>Re: Versioned Data, multiple UpdateCursors, RuntimeError: The requested operation is invalid on a closed state</title>
      <link>https://community.esri.com/t5/python-questions/versioned-data-multiple-updatecursors-runtimeerror/m-p/1043896#M60671</link>
      <description>&lt;P&gt;So after moving my edit start and stop sessions to every conceivable combination, I decided to take a look at the custom cursor module again since it starts and stops for me.&amp;nbsp; After some research, I found some changes to the cursor module.&amp;nbsp; Well, lo and behold, I got my code working again.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks all for your help!&lt;/P&gt;&lt;P&gt;Code for UpdateCursor Module:&lt;/P&gt;&lt;PRE&gt;&lt;SPAN&gt;# for python 2.7&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;arcpy&lt;BR /&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;os&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;find_ws&lt;/SPAN&gt;(path&lt;SPAN&gt;, &lt;/SPAN&gt;ws_type=&lt;SPAN&gt;''):&lt;/SPAN&gt;&lt;BR /&gt;    &lt;SPAN&gt;"""finds a valid workspace path for an arcpy.da.Editor() Session&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    Required:&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        path -- path to features or workspace&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    Optional:&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        ws_type -- option to find specific workspace type (FileSystem|LocalDatabase|RemoteDatabase)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    """&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;# try original path first&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;if &lt;/SPAN&gt;os.sep &lt;SPAN&gt;not in &lt;/SPAN&gt;path:&lt;BR /&gt;        path = arcpy.Describe(path).catalogPath&lt;BR /&gt;    desc = arcpy.Describe(path)&lt;BR /&gt;    &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;hasattr&lt;/SPAN&gt;(desc&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'workspaceType'):&lt;/SPAN&gt;&lt;BR /&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;ws_type &lt;SPAN&gt;and &lt;/SPAN&gt;ws_type == desc.workspaceType:&lt;BR /&gt;            &lt;SPAN&gt;return &lt;/SPAN&gt;path&lt;BR /&gt;        &lt;SPAN&gt;elif not &lt;/SPAN&gt;ws_type:&lt;BR /&gt;            &lt;SPAN&gt;return &lt;/SPAN&gt;path&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;# search until finding a valid workspace&lt;BR /&gt;&lt;/SPAN&gt;    SPLIT = &lt;SPAN&gt;filter&lt;/SPAN&gt;(&lt;SPAN&gt;None&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;path.split(os.sep))&lt;BR /&gt;    &lt;SPAN&gt;if &lt;/SPAN&gt;path.startswith(&lt;SPAN&gt;'&lt;/SPAN&gt;&lt;SPAN&gt;\\\\&lt;/SPAN&gt;&lt;SPAN&gt;'):&lt;/SPAN&gt;&lt;BR /&gt;        SPLIT[&lt;SPAN&gt;0&lt;/SPAN&gt;] = &lt;SPAN&gt;r'\\{0}'&lt;/SPAN&gt;.format(SPLIT[&lt;SPAN&gt;0&lt;/SPAN&gt;])&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;# find valid workspace&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;for &lt;/SPAN&gt;i &lt;SPAN&gt;in &lt;/SPAN&gt;&lt;SPAN&gt;xrange&lt;/SPAN&gt;(&lt;SPAN&gt;1&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;len&lt;/SPAN&gt;(SPLIT)):&lt;BR /&gt;        sub_dir = os.sep.join(SPLIT[:-i])&lt;BR /&gt;        desc = arcpy.Describe(sub_dir)&lt;BR /&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;hasattr&lt;/SPAN&gt;(desc&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'workspaceType'):&lt;/SPAN&gt;&lt;BR /&gt;            &lt;SPAN&gt;if &lt;/SPAN&gt;ws_type &lt;SPAN&gt;and &lt;/SPAN&gt;ws_type == desc.workspaceType:&lt;BR /&gt;                &lt;SPAN&gt;return &lt;/SPAN&gt;sub_dir&lt;BR /&gt;            &lt;SPAN&gt;elif not &lt;/SPAN&gt;ws_type:&lt;BR /&gt;                &lt;SPAN&gt;return &lt;/SPAN&gt;sub_dir&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;class &lt;/SPAN&gt;UpdateCursor(&lt;SPAN&gt;object):&lt;/SPAN&gt;&lt;BR /&gt;    &lt;SPAN&gt;"""wrapper class for arcpy.da.UpdateCursor, to automatically&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    implement editing (required for versioned data, and data with&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    geometric networks, topologies, network datasets, and relationship&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    classes"""&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;__init__&lt;/SPAN&gt;(&lt;SPAN&gt;self&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;*args&lt;SPAN&gt;, &lt;/SPAN&gt;**kwargs):&lt;BR /&gt;        &lt;SPAN&gt;"""initiate wrapper class for update cursor.  Supported args:&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        in_table, field_names, where_clause=None, spatial_reference=None,&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        explode_to_points=False, sql_clause=(None, None)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        """&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;self&lt;/SPAN&gt;.args = args&lt;BR /&gt;        &lt;SPAN&gt;self&lt;/SPAN&gt;.kwargs = kwargs&lt;BR /&gt;        &lt;SPAN&gt;self&lt;/SPAN&gt;.edit = &lt;SPAN&gt;None&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;__enter__&lt;/SPAN&gt;(&lt;SPAN&gt;self):&lt;/SPAN&gt;&lt;BR /&gt;        ws = &lt;SPAN&gt;None&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;self&lt;/SPAN&gt;.args:&lt;BR /&gt;            ws = find_ws(&lt;SPAN&gt;self&lt;/SPAN&gt;.args[&lt;SPAN&gt;0&lt;/SPAN&gt;])&lt;BR /&gt;        &lt;SPAN&gt;elif &lt;/SPAN&gt;&lt;SPAN&gt;'in_table' &lt;/SPAN&gt;&lt;SPAN&gt;in &lt;/SPAN&gt;&lt;SPAN&gt;self&lt;/SPAN&gt;.kwargs:&lt;BR /&gt;            ws = find_ws(&lt;SPAN&gt;self&lt;/SPAN&gt;.kwargs[&lt;SPAN&gt;'in_table'&lt;/SPAN&gt;])&lt;BR /&gt;        &lt;SPAN&gt;self&lt;/SPAN&gt;.edit = arcpy.da.Editor(ws)&lt;BR /&gt;        &lt;SPAN&gt;self&lt;/SPAN&gt;.edit.startEditing()&lt;BR /&gt;        &lt;SPAN&gt;self&lt;/SPAN&gt;.edit.startOperation()&lt;BR /&gt;        &lt;SPAN&gt;return &lt;/SPAN&gt;arcpy.da.UpdateCursor(*&lt;SPAN&gt;self&lt;/SPAN&gt;.args&lt;SPAN&gt;, &lt;/SPAN&gt;**&lt;SPAN&gt;self&lt;/SPAN&gt;.kwargs)&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;__exit__&lt;/SPAN&gt;(&lt;SPAN&gt;self&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;type&lt;SPAN&gt;, &lt;/SPAN&gt;value&lt;SPAN&gt;, &lt;/SPAN&gt;traceback):&lt;BR /&gt;        &lt;SPAN&gt;self&lt;/SPAN&gt;.edit.stopOperation()&lt;BR /&gt;        &lt;SPAN&gt;self&lt;/SPAN&gt;.edit.stopEditing(&lt;SPAN&gt;True&lt;/SPAN&gt;)&lt;BR /&gt;        &lt;SPAN&gt;self&lt;/SPAN&gt;.edit = &lt;SPAN&gt;None&lt;/SPAN&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;And my code :&lt;/P&gt;&lt;PRE&gt;&lt;SPAN&gt;# works for python2.7&lt;BR /&gt;import arcpy&lt;BR /&gt;import datetime&lt;BR /&gt;import cursors&lt;BR /&gt;&lt;BR /&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;calcNorthing&lt;/SPAN&gt;():&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;#  calculate northing&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        # edit.startEditing(False, True)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        # edit.startOperation()&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;'Northing' &lt;/SPAN&gt;&lt;SPAN&gt;not in &lt;/SPAN&gt;lstFields:&lt;BR /&gt;            arcpy.AddField_management(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Northing"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"DOUBLE"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;# edit.stopOperation(True)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        # edit.stopEditing()&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Calculating Northing Field"&lt;/SPAN&gt;)&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Calculating Northing Field"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;with &lt;/SPAN&gt;cursors.UpdateCursor(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;[&lt;SPAN&gt;'Northing'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'Shape@'&lt;/SPAN&gt;]&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Northing IS NULL"&lt;/SPAN&gt;) &lt;SPAN&gt;as &lt;/SPAN&gt;cursor:&lt;BR /&gt;            &lt;SPAN&gt;for &lt;/SPAN&gt;row &lt;SPAN&gt;in &lt;/SPAN&gt;cursor:&lt;BR /&gt;                &lt;SPAN&gt;if &lt;/SPAN&gt;row[&lt;SPAN&gt;1&lt;/SPAN&gt;] &lt;SPAN&gt;is not &lt;/SPAN&gt;&lt;SPAN&gt;None&lt;/SPAN&gt;:&lt;BR /&gt;                    pt = row[&lt;SPAN&gt;1&lt;/SPAN&gt;].projectAs(&lt;SPAN&gt;'2236'&lt;/SPAN&gt;).centroid&lt;BR /&gt;                    row[&lt;SPAN&gt;0&lt;/SPAN&gt;] = &lt;SPAN&gt;round&lt;/SPAN&gt;(pt.Y&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;3&lt;/SPAN&gt;)&lt;BR /&gt;                cursor.updateRow(row)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Completed Northing calculation"&lt;/SPAN&gt;)&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Completed Northing calculation"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;except&lt;/SPAN&gt;():&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Failed Northing calculation."&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;calcEasting&lt;/SPAN&gt;():&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;#  calculate easting&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;'Easting' &lt;/SPAN&gt;&lt;SPAN&gt;not in &lt;/SPAN&gt;lstFields:&lt;BR /&gt;            arcpy.AddField_management(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Easting"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"DOUBLE"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Calculating Easting Field"&lt;/SPAN&gt;)&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Calculating Easting Field"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;with &lt;/SPAN&gt;cursors.UpdateCursor(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;[&lt;SPAN&gt;'Easting'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'Shape@'&lt;/SPAN&gt;]&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Easting IS NULL"&lt;/SPAN&gt;) &lt;SPAN&gt;as &lt;/SPAN&gt;cursor:&lt;BR /&gt;            &lt;SPAN&gt;for &lt;/SPAN&gt;row &lt;SPAN&gt;in &lt;/SPAN&gt;cursor:&lt;BR /&gt;                &lt;SPAN&gt;if &lt;/SPAN&gt;row[&lt;SPAN&gt;1&lt;/SPAN&gt;] &lt;SPAN&gt;is not &lt;/SPAN&gt;&lt;SPAN&gt;None&lt;/SPAN&gt;:&lt;BR /&gt;                    pt = row[&lt;SPAN&gt;1&lt;/SPAN&gt;].projectAs(&lt;SPAN&gt;'2236'&lt;/SPAN&gt;).centroid&lt;BR /&gt;                    row[&lt;SPAN&gt;0&lt;/SPAN&gt;] = &lt;SPAN&gt;round&lt;/SPAN&gt;(pt.X&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;3&lt;/SPAN&gt;)&lt;BR /&gt;                cursor.updateRow(row)&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;except&lt;/SPAN&gt;():&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Failed Easting calculation."&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;finally&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Completed Easting calculation"&lt;/SPAN&gt;)&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Completed Easting calculation"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;calcLongitude&lt;/SPAN&gt;():&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;#  calculate longitude&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;'Longitude' &lt;/SPAN&gt;&lt;SPAN&gt;not in &lt;/SPAN&gt;lstFields:&lt;BR /&gt;            arcpy.AddField_management(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Longitude"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"DOUBLE"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Calculating Longitude Field"&lt;/SPAN&gt;)&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Calculating Longitude Field"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;with &lt;/SPAN&gt;cursors.UpdateCursor(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;[&lt;SPAN&gt;'Longitude'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'Shape@'&lt;/SPAN&gt;]&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Longitude IS NULL or Longitude &amp;lt; -82"&lt;/SPAN&gt;) &lt;SPAN&gt;as &lt;/SPAN&gt;cursor:&lt;BR /&gt;            &lt;SPAN&gt;for &lt;/SPAN&gt;row &lt;SPAN&gt;in &lt;/SPAN&gt;cursor:&lt;BR /&gt;                &lt;SPAN&gt;if &lt;/SPAN&gt;row[&lt;SPAN&gt;1&lt;/SPAN&gt;] &lt;SPAN&gt;is not &lt;/SPAN&gt;&lt;SPAN&gt;None&lt;/SPAN&gt;:&lt;BR /&gt;                    pt = row[&lt;SPAN&gt;1&lt;/SPAN&gt;].projectAs(&lt;SPAN&gt;'4326'&lt;/SPAN&gt;).centroid&lt;BR /&gt;                    row[&lt;SPAN&gt;0&lt;/SPAN&gt;] = &lt;SPAN&gt;round&lt;/SPAN&gt;(pt.X&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;6&lt;/SPAN&gt;)&lt;BR /&gt;                cursor.updateRow(row)&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;finally&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Completed Longitude calculation"&lt;/SPAN&gt;)&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Completed Longitude calculation"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;calcLatitude&lt;/SPAN&gt;():&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;#  calculate latitude&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;'Latitude' &lt;/SPAN&gt;&lt;SPAN&gt;not in &lt;/SPAN&gt;lstFields:&lt;BR /&gt;            arcpy.AddField_management(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Latitude"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"DOUBLE"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Calculating Latitude Field"&lt;/SPAN&gt;)&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Calculating Latitude Field"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;with &lt;/SPAN&gt;cursors.UpdateCursor(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;[&lt;SPAN&gt;'Latitude'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'Shape@'&lt;/SPAN&gt;]&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Latitude IS NULL or Latitude &amp;lt; 0"&lt;/SPAN&gt;) &lt;SPAN&gt;as &lt;/SPAN&gt;cursor:&lt;BR /&gt;            &lt;SPAN&gt;for &lt;/SPAN&gt;row &lt;SPAN&gt;in &lt;/SPAN&gt;cursor:&lt;BR /&gt;                &lt;SPAN&gt;if &lt;/SPAN&gt;row[&lt;SPAN&gt;1&lt;/SPAN&gt;] &lt;SPAN&gt;is not &lt;/SPAN&gt;&lt;SPAN&gt;None&lt;/SPAN&gt;:&lt;BR /&gt;                    pt = row[&lt;SPAN&gt;1&lt;/SPAN&gt;].projectAs(&lt;SPAN&gt;'4326'&lt;/SPAN&gt;).centroid&lt;BR /&gt;                    row[&lt;SPAN&gt;0&lt;/SPAN&gt;] = &lt;SPAN&gt;round&lt;/SPAN&gt;(pt.Y&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;6&lt;/SPAN&gt;)&lt;BR /&gt;                cursor.updateRow(row)&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;finally&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Completed Latitude calculation"&lt;/SPAN&gt;)&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Completed Latitude calculation"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;calcSLOCSEQ&lt;/SPAN&gt;():&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;#  calculate  SERVICE_LOC_SEQ&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;'S_LOC_SEQ' &lt;/SPAN&gt;&lt;SPAN&gt;in &lt;/SPAN&gt;lstFields:&lt;BR /&gt;            &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Calculating SERVICE_LOC_SEQ"&lt;/SPAN&gt;)&lt;BR /&gt;            arcpy.AddMessage(&lt;SPAN&gt;"Calculating SERVICE_LOC_SEQ"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;            &lt;SPAN&gt;with &lt;/SPAN&gt;cursors.UpdateCursor(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;[&lt;SPAN&gt;'S_LOC_SEQ'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'METER_NUMB'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'OBJECTID'&lt;/SPAN&gt;]&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'S_LOC_SEQ IS NULL'&lt;/SPAN&gt;) &lt;SPAN&gt;as &lt;/SPAN&gt;cursor:&lt;BR /&gt;                &lt;SPAN&gt;for &lt;/SPAN&gt;row &lt;SPAN&gt;in &lt;/SPAN&gt;cursor:&lt;BR /&gt;                    &lt;SPAN&gt;if &lt;/SPAN&gt;row[&lt;SPAN&gt;1&lt;/SPAN&gt;] &lt;SPAN&gt;is &lt;/SPAN&gt;&lt;SPAN&gt;None&lt;/SPAN&gt;:&lt;BR /&gt;                        &lt;SPAN&gt;print &lt;/SPAN&gt;(&lt;SPAN&gt;"OBJECTID #{} has no meter number"&lt;/SPAN&gt;.format(row[&lt;SPAN&gt;2&lt;/SPAN&gt;]))&lt;BR /&gt;                    &lt;SPAN&gt;elif &lt;/SPAN&gt;row[&lt;SPAN&gt;1&lt;/SPAN&gt;].isnumeric():&lt;BR /&gt;                        row[&lt;SPAN&gt;0&lt;/SPAN&gt;] = row[&lt;SPAN&gt;1&lt;/SPAN&gt;]&lt;BR /&gt;                        &lt;SPAN&gt;#  row[7] = datetime.datetime.now()&lt;BR /&gt;&lt;/SPAN&gt;                    &lt;SPAN&gt;elif not &lt;/SPAN&gt;row[&lt;SPAN&gt;1&lt;/SPAN&gt;].isnumeric():&lt;BR /&gt;                        &lt;SPAN&gt;print &lt;/SPAN&gt;(&lt;SPAN&gt;"Could not calculate OBJECTID #{}. Check for a bad number."&lt;/SPAN&gt;.format(row[&lt;SPAN&gt;2&lt;/SPAN&gt;]))&lt;BR /&gt;                    cursor.updateRow(row)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;else&lt;/SPAN&gt;:&lt;BR /&gt;            &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Field does not exist."&lt;/SPAN&gt;)&lt;BR /&gt;            arcpy.AddMessage(&lt;SPAN&gt;"Field does not exist. No calculation performed."&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;finally&lt;/SPAN&gt;:&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Completed SERVICE_LOC_SEQ calculation"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;calcDuplicates&lt;/SPAN&gt;():&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;'METER_NUMB' &lt;/SPAN&gt;&lt;SPAN&gt;in &lt;/SPAN&gt;lstFields:&lt;BR /&gt;            arcpy.AddMessage(&lt;SPAN&gt;"Searching for Duplicates. A value more than 1 in the &lt;/SPAN&gt;&lt;SPAN&gt;\"&lt;/SPAN&gt;&lt;SPAN&gt;Point_ID&lt;/SPAN&gt;&lt;SPAN&gt;\"&lt;/SPAN&gt;&lt;SPAN&gt; field represents number of duplicae values"&lt;/SPAN&gt;)&lt;BR /&gt;            infeature = userInput&lt;BR /&gt;            field_in = &lt;SPAN&gt;'METER_NUMB'&lt;BR /&gt;&lt;/SPAN&gt;            field_out = &lt;SPAN&gt;'Point_ID'&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;# creating the list with all the values in the field, including duplicates&lt;BR /&gt;&lt;/SPAN&gt;            lista = []&lt;BR /&gt;            &lt;SPAN&gt;with &lt;/SPAN&gt;arcpy.da.SearchCursor(infeature&lt;SPAN&gt;, &lt;/SPAN&gt;[&lt;SPAN&gt;'METER_NUMB'&lt;/SPAN&gt;]) &lt;SPAN&gt;as &lt;/SPAN&gt;cursor1:&lt;BR /&gt;                &lt;SPAN&gt;for &lt;/SPAN&gt;row &lt;SPAN&gt;in &lt;/SPAN&gt;cursor1:&lt;BR /&gt;                    lista.append(row[&lt;SPAN&gt;0&lt;/SPAN&gt;])&lt;BR /&gt;&lt;BR /&gt;            &lt;SPAN&gt;# updating the count field with the number on occurrences of field_in values&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;            # in the previously created list&lt;BR /&gt;&lt;/SPAN&gt;            cursor2 = arcpy.UpdateCursor(infeature)&lt;BR /&gt;            &lt;SPAN&gt;for &lt;/SPAN&gt;row &lt;SPAN&gt;in &lt;/SPAN&gt;cursor2:&lt;BR /&gt;                i = row.getValue(field_in)&lt;BR /&gt;                occ = lista.count(i)&lt;BR /&gt;                row.setValue(field_out&lt;SPAN&gt;, &lt;/SPAN&gt;occ)&lt;BR /&gt;                cursor2.updateRow(row)&lt;BR /&gt;            &lt;SPAN&gt;del &lt;/SPAN&gt;cursor2&lt;BR /&gt;            &lt;SPAN&gt;del &lt;/SPAN&gt;row&lt;BR /&gt;            &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Done."&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;else&lt;/SPAN&gt;:&lt;BR /&gt;            &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"METER_NUMB field does not exist. No duplicate check performed."&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;except&lt;/SPAN&gt;():&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Calculating duplicate process failed"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;finally&lt;/SPAN&gt;:&lt;BR /&gt;        arcpy.AddMessage(&lt;SPAN&gt;"Completed duplicate calculation"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;if &lt;/SPAN&gt;__name__ == &lt;SPAN&gt;'__main__'&lt;/SPAN&gt;:&lt;BR /&gt;&lt;BR /&gt;    startTime = datetime.datetime.now().replace(&lt;SPAN&gt;microsecond&lt;/SPAN&gt;=&lt;SPAN&gt;0&lt;/SPAN&gt;)&lt;BR /&gt;    &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;"Operation started on {}"&lt;/SPAN&gt;.format(startTime))&lt;BR /&gt;    arcpy.AddMessage(&lt;SPAN&gt;"Operation started on {}"&lt;/SPAN&gt;.format(startTime))&lt;BR /&gt;&lt;BR /&gt;    arcpy.env.overwriteOutput = &lt;SPAN&gt;True&lt;BR /&gt;&lt;/SPAN&gt;    userInput = arcpy.GetParameterAsText(&lt;SPAN&gt;0&lt;/SPAN&gt;)&lt;BR /&gt;    lstFields = [f.name &lt;SPAN&gt;for &lt;/SPAN&gt;f &lt;SPAN&gt;in &lt;/SPAN&gt;arcpy.ListFields(userInput)]&lt;BR /&gt;    workspace = &lt;SPAN&gt;"Database Connections&lt;/SPAN&gt;&lt;SPAN&gt;\\&lt;/SPAN&gt;&lt;SPAN&gt;wGISProd@GISdb.OSA.sde"&lt;BR /&gt;&lt;/SPAN&gt;    edit = arcpy.da.Editor(workspace)&lt;BR /&gt;    calcNorthing()&lt;BR /&gt;    calcEasting()&lt;BR /&gt;    calcLongitude()&lt;BR /&gt;    calcLatitude()&lt;BR /&gt;    calcSLOCSEQ()&lt;BR /&gt;    calcDuplicates()&lt;BR /&gt;    arcpy.SelectLayerByAttribute_management(userInput&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"CLEAR_SELECTION"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;    endTime = datetime.datetime.now().replace(&lt;SPAN&gt;microsecond&lt;/SPAN&gt;=&lt;SPAN&gt;0&lt;/SPAN&gt;)&lt;BR /&gt;    dur = endTime - startTime&lt;BR /&gt;    dur = &lt;SPAN&gt;str&lt;/SPAN&gt;(dur)&lt;BR /&gt;    &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;'Duration: {}'&lt;/SPAN&gt;.format(dur))&lt;BR /&gt;    arcpy.AddMessage(&lt;SPAN&gt;'Duration: {}'&lt;/SPAN&gt;.format(dur))&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 05 Apr 2021 18:01:03 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/versioned-data-multiple-updatecursors-runtimeerror/m-p/1043896#M60671</guid>
      <dc:creator>EvanMyers1</dc:creator>
      <dc:date>2021-04-05T18:01:03Z</dc:date>
    </item>
    <item>
      <title>Re: Versioned Data, multiple UpdateCursors, RuntimeError: The requested operation is invalid on a closed state</title>
      <link>https://community.esri.com/t5/python-questions/versioned-data-multiple-updatecursors-runtimeerror/m-p/1044018#M60679</link>
      <description>&lt;P&gt;&lt;SPAN&gt;Do you have an edit session started in any Desktop GIS software (ie ArcPro or ArcMap)?&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 05 Apr 2021 22:43:18 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/versioned-data-multiple-updatecursors-runtimeerror/m-p/1044018#M60679</guid>
      <dc:creator>DavinWalker2</dc:creator>
      <dc:date>2021-04-05T22:43:18Z</dc:date>
    </item>
    <item>
      <title>Re: Versioned Data, multiple UpdateCursors, RuntimeError: The requested operation is invalid on a closed state</title>
      <link>https://community.esri.com/t5/python-questions/versioned-data-multiple-updatecursors-runtimeerror/m-p/1044128#M60691</link>
      <description>&lt;P&gt;I did not.&amp;nbsp; Right now my code works correctly whether or not I am in an edit session.&lt;/P&gt;</description>
      <pubDate>Tue, 06 Apr 2021 12:38:10 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/versioned-data-multiple-updatecursors-runtimeerror/m-p/1044128#M60691</guid>
      <dc:creator>EvanMyers1</dc:creator>
      <dc:date>2021-04-06T12:38:10Z</dc:date>
    </item>
  </channel>
</rss>

