Select to view content in your preferred language

How to bypass raise Error in if else statement

31
0
2 hours ago
Labels (2)
LoriEmersonKDOT
Regular Contributor

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
    
    

  

0 Kudos
0 Replies