Why does my arcpy code raise an error even though the if/else statement says to bypass it? For example, why does the raise RouteError still happen when if row[3] == "NO ERROR" is true?
class RouteError(Exception):
pass
import arcpy
import sys
arcpy.env.overwriteOutput = True
def CalcPavementArea_tool(in_FC, in_RouteIdx, in_Workspace, in_LRS, out_Poly_Area):
try:
# -------------------------------------------
# Define workspace using input paramter value
# -------------------------------------------
arcpy.env.workspace = in_Workspace
my_RouteID_FromTo_Measures_Table = in_Workspace + "\\input_RouteId_FromTo_Measures"
# ---------------------------------------------------------
# Update table with user's RouteId,, From, and To Measures
# ---------------------------------------------------------
fields_inputRoute = ['RouteId', 'FromMeasure', 'ToMeasure']
with arcpy.da.UpdateCursor(my_RouteID_FromTo_Measures_Table, fields_inputRoute) as cursor:
for row in cursor:
#Update RouteId, FromMeasure, ToMeasure values
row[0] = in_RouteId
row[1] = in_FromMeasure
row[2] = in_ToMeasure
cursor.updateRow(row)
arcpy.AddMessage("Update to RouteId=" + in_RouteId + ", FromMeasure=" + in_FromMeasure + ", ToMeasure=" + in_ToMeasure + " input table completed successfully")
# ---------------------------------------------------------
# Make Route Event from LRS_County and User's input
# ---------------------------------------------------------
# Make Route Event Layer (Make Route Event Layer) -- from input RouteId, and From/To measure
output_RouteId_FromToMeasures_Events = "input_RouteId_FromToMeasures Events"
arcpy.lr.MakeRouteEventLayer(
in_routes=in_LRS,
route_id_field="RouteId",
in_table=my_RouteID_FromTo_Measures_Table,
in_event_properties="RouteId; LINE; FromMeasure; ToMeasure",
out_layer=output_RouteId_FromToMeasures_Events,
add_error_field="ERROR_FIELD",
add_angle_field="NO_ANGLE_FIELD",
angle_type="NORMAL",
complement_angle="ANGLE",
offset_direction="LEFT",
point_event_type="POINT")
arcpy.AddMessage("Make Route Event Layer completed successfully")
# ---------------------------------------------------------
# Verify Route Results -- LOC_ERROR
# ---------------------------------------------------------
myEventFields = ["RouteId", "FromMeasure", "ToMeasure", "LOC_ERROR"]
with arcpy.da.SearchCursor("input_RouteId_FromToMeasures Events", myEventFields) as srchCursor:
for row in srchCursor:
if row[3] == "No Error":
arcpy.AddMessage("RouteId=" + str(row[0]) + ": FromMeasure=" + str(row[1]) + " ToMeasure=" + str(row[2]) + " are valid.")
else:
if row[3] == "Measure Extent Out Of Route Measure Range":
arcpy.AddWarning("Measure Extent Out Of Route Measure Range. RouteId=" + str(row[0]) + ": FromMeasure=" + str(row[1]) + " ToMeasure=" + str(row[2]))
else:
arcpy.AddError(row[3] + ". RouteId=" + str(row[0]) + ": FromMeasure=" + str(row[1]) + " ToMeasure=" + str(row[2]))
raise RouteError
# ---------------------------------------------------------
# Export the Route Event to a Feature Class
# ---------------------------------------------------------
arcpy.conversion.ExportFeatures(
output_RouteId_FromToMeasures_Events,
out_features=in_Workspace + r"\RouteId_FromToMeasures_Events",
use_field_alias_as_name="NOT_USE_ALIAS",
field_mapping=None
)
arcpy.AddMessage(in_Workspace + r"\RouteId_FromToMeasures_Events" + " EXPORT completed successfully")
return
except RouteError:
arcpy.AddMessage("Script ended unsuccessfully")
except arcpy.ExecuteError:
arcpy.AddMessage(arcpy.GetMessages(2))
except Exception as e:
print("Other error:", e)
if __name__ == "__main__":
## -------------------------------------------------------
## Grab parameter values and pass to our tool
## -------------------------------------------------------
in_FC = arcpy.GetParameterAsText(0) # -- feature class
in_LRS = arcpy.GetParameterAsText(1) # -- LRS
in_RouteIdx = arcpy.GetParameterAsText(2) # -- RouteId
in_FromMeasure = arcpy.GetParameterAsText(3)
in_ToMeasure = arcpy.GetParameterAsText(4)
in_Workspace = arcpy.GetParameterAsText(5) # -- workspace
out_Poly_Area = arcpy.GetParameterAsText(6) # -- output polygon
arcpy.AddMessage(in_RouteIdx)
arcpy.AddMessage(in_FromMeasure)
arcpy.AddMessage(in_ToMeasure)
CalcPavementArea_tool(in_FC, in_RouteIdx, in_Workspace, in_LRS, out_Poly_Area)
#arcpy.SetParameterAsText(2, "Result") # -- Output polygon with paved surface area