<?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: Python crash: arcpy standalone script for intersection analysis and summary stats in Python Questions</title>
    <link>https://community.esri.com/t5/python-questions/python-crash-arcpy-standalone-script-for/m-p/471452#M36792</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;it seems moving following code into a separate function solves the problem.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;#process the outputs
&amp;nbsp; for tmpOutput in tmpOutputs:
&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; tmpOPFullName = tmpOutput["OutputName"]
 #generate an unique temp file for stat output
&amp;nbsp;&amp;nbsp;&amp;nbsp; tmpOPFileName = id_generator()
&amp;nbsp;&amp;nbsp;&amp;nbsp; tmpOPType = tmpOutput["Type"]

&amp;nbsp;&amp;nbsp;&amp;nbsp; #Stats Calculation
&amp;nbsp;&amp;nbsp;&amp;nbsp; if tmpOPType == CAL_COUNT:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; baseField = tmpOutput["BaseField"]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "count of field " + baseField
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; statsFields = [[baseField, "COUNT"]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Statistics_analysis(tmpOutputLayerName, tmpOPFileName, statsFields, "")
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; elif tmpOPType == CAL_COUNT_PER_TYPE:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; baseField = tmpOutput["BaseField"]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; caseField = tmpOutput["CaseField"] 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "count of field " + baseField + " by case field " + caseField
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; statsFields = [[baseField, "COUNT"]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Statistics_analysis(tmpOutputLayerName, tmpOPFileName, statsFields, caseField)
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; elif tmpOPType == CAL_FIELD_SUM:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; baseField = tmpOutput["BaseField"] 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "sum of field " + baseField
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; statsFields = [[baseField, "SUM"]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Statistics_analysis(tmpOutputLayerName, tmpOPFileName, statsFields, "")
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; elif tmpOPType == CAL_FIELD_SUM_PER_TYPE:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; baseField = tmpOutput["BaseField"]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; caseField = tmpOutput["CaseField"] 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "sum of field " + baseField + " by case field " + caseField
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; statsFields = [[baseField, "SUM"]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Statistics_analysis(tmpOutputLayerName, tmpOPFileName, statsFields, caseField)
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; print "finished"

&amp;nbsp;&amp;nbsp;&amp;nbsp; #TODO: export to CSV&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;the script is rather simple. Given a list of layers (point, polyline, polygon), intersect each of them with one same layer, then for each intersection result layer, do some simple summary stats including Count, Sum of one field, Count per Case (given a Case Field), and Sum per Case (given sum_field and case_field).&lt;BR /&gt;&lt;BR /&gt;the logic is to iterate each layer to intersect with the base_intersection_layer, then calculate each stat.&lt;BR /&gt;&lt;BR /&gt;when run it, very often Python crashes during the stat calculation after finishing the intersection of first layer. but sometimes when calculate the second Stat, sometimes third or the last.&lt;BR /&gt;&lt;BR /&gt;here is the script:&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;# Import system modules
import arcpy
from arcpy import env
import string
import random
import time

### 
 Configuration Section
###
# data source path (full path)
workspacePath = "C:\test.gdb"
# input layers
inputLayers = []
# intersection layer
intersectionLayerName = "base_intersection"

###
 Utility Functions
###
# function to add a new layer
def addLayer(layerName):
&amp;nbsp; tmpLayer = {
&amp;nbsp;&amp;nbsp;&amp;nbsp; "LayerName": layerName,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "Stats": []
&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp; inputLayers.append(tmpLayer)

&amp;nbsp; return tmpLayer

# Stat Calculation Types
CAL_COUNT = 0
CAL_COUNT_PER_TYPE = 1
CAL_FIELD_SUM = 2
CAL_FIELD_SUM_PER_TYPE = 3

# function to add one stat output for CAL_COUNT calculation
# NOTE: must provide a count-able field, such as 'OBJECTID' as faster to count than enumerating features
def outputCount(layer, outputName, baseFieldName):
&amp;nbsp; tmpOutput = {
&amp;nbsp;&amp;nbsp;&amp;nbsp; "OutputName": outputName,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "Type": CAL_COUNT,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "BaseField": baseFieldName
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp; layer['Stats'].append(tmpOutput)

&amp;nbsp; return tmpOutput

# function to add one stat output for CAL_COUNT_PER_TYPE calculation
def outputCountPerCase(layer, outputName, baseFieldName, caseFieldName):
&amp;nbsp; tmpOutput = {
&amp;nbsp;&amp;nbsp;&amp;nbsp; "OutputName": outputName,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "Type": CAL_COUNT_PER_TYPE,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "BaseField": baseFieldName,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "CaseField": caseFieldName
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp; layer['Stats'].append(tmpOutput)

&amp;nbsp; return tmpOutput

# function to add one stat output for CAL_FIELD_SUM calculation
def outputSum(layer, outputName, baseFieldName):
&amp;nbsp; tmpOutput = {
&amp;nbsp;&amp;nbsp;&amp;nbsp; "OutputName": outputName,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "Type": CAL_FIELD_SUM,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "BaseField": baseFieldName
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp; layer['Stats'].append(tmpOutput)

&amp;nbsp; return tmpOutput

# function to add one stat output for CAL_FIELD_SUM_PER_TYPE calculation
def outputSumPerCase(layer, outputName, baseFieldName, caseFieldName):
&amp;nbsp; tmpOutput = {
&amp;nbsp;&amp;nbsp;&amp;nbsp; "OutputName": outputName,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "Type": CAL_FIELD_SUM_PER_TYPE,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "BaseField": baseFieldName,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "CaseField": caseFieldName
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp; layer['Stats'].append(tmpOutput)

&amp;nbsp; return tmpOutput

# function to generate an unique string
def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
&amp;nbsp; return ''.join(random.choice(chars) for x in range(size))

# function to delete a temp file
def deleteLayer(layerName):
&amp;nbsp; if arcpy.Exists(layerName):
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Delete_management(layerName)
&amp;nbsp;&amp;nbsp;&amp;nbsp; print 'deleted ' + layerName
&amp;nbsp; else:
&amp;nbsp;&amp;nbsp;&amp;nbsp; print layerName + ' not exist'

### 
 Feed Data
###
newLayer = addLayer("point")
# Stat: Count
outputCount(newLayer, "Count", "OBJECTID")
# Stat: Count Per Case
outputCountPerCase(newLayer, "Count Per Case", "OBJECTID", "CaseField")
# Stat: Sum
outputSum(newLayer, "Sum", "SumField")
# Stat: Sum Per Case
outputSumPerCase(newLayer, "Sum Per Case", "SumField", "CaseField")

### 
 Single Layer Processing (intersection analysis, and Stats calculation)
###
def processLayer(layer):
&amp;nbsp; tmpLayerName = layer["LayerName"]
&amp;nbsp; print "start processing layer: " + tmpLayerName
&amp;nbsp; tmpStats = layer["Stats"]

&amp;nbsp; #layer to intersect
&amp;nbsp; tmpInputLayers = [tmpLayerName, intersectionLayerName]
&amp;nbsp; 
&amp;nbsp; #generate an unique temp file for intersection results
&amp;nbsp; tmpOutputLayerName = tmpLayerName + "_output_" + id_generator()

&amp;nbsp; #do the Intersection
&amp;nbsp; arcpy.Intersect_analysis(tmpInputLayers, tmpOutputLayerName, "ALL", "", "INPUT")

&amp;nbsp; #process the outputs
&amp;nbsp; for tmpOutput in tmpOutputs:
&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; tmpOPFullName = tmpOutput["OutputName"]
 #generate an unique temp file for stat output
&amp;nbsp;&amp;nbsp;&amp;nbsp; tmpOPFileName = id_generator()
&amp;nbsp;&amp;nbsp;&amp;nbsp; tmpOPType = tmpOutput["Type"]

&amp;nbsp;&amp;nbsp;&amp;nbsp; #Stats Calculation
&amp;nbsp;&amp;nbsp;&amp;nbsp; if tmpOPType == CAL_COUNT:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; baseField = tmpOutput["BaseField"]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "count of field " + baseField
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; statsFields = [[baseField, "COUNT"]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Statistics_analysis(tmpOutputLayerName, tmpOPFileName, statsFields, "")
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; elif tmpOPType == CAL_COUNT_PER_TYPE:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; baseField = tmpOutput["BaseField"]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; caseField = tmpOutput["CaseField"] 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "count of field " + baseField + " by case field " + caseField
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; statsFields = [[baseField, "COUNT"]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Statistics_analysis(tmpOutputLayerName, tmpOPFileName, statsFields, caseField)
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; elif tmpOPType == CAL_FIELD_SUM:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; baseField = tmpOutput["BaseField"] 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "sum of field " + baseField
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; statsFields = [[baseField, "SUM"]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Statistics_analysis(tmpOutputLayerName, tmpOPFileName, statsFields, "")
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; elif tmpOPType == CAL_FIELD_SUM_PER_TYPE:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; baseField = tmpOutput["BaseField"]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; caseField = tmpOutput["CaseField"] 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "sum of field " + baseField + " by case field " + caseField
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; statsFields = [[baseField, "SUM"]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Statistics_analysis(tmpOutputLayerName, tmpOPFileName, statsFields, caseField)
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; print "finished"

&amp;nbsp;&amp;nbsp;&amp;nbsp; #TODO: export to CSV
 
&amp;nbsp;&amp;nbsp;&amp;nbsp; #delete temp output stat file
&amp;nbsp;&amp;nbsp;&amp;nbsp; deleteLayer(tmpOPFileName)

&amp;nbsp; #delete temp intersection_result layer file
&amp;nbsp; deleteLayer(tmpOutputLayerName)

### 
 Mass Processing (of all layers)
###
try:
&amp;nbsp;&amp;nbsp;&amp;nbsp; # Set the workspace (to avoid having to type in the full path to the data every time)
&amp;nbsp;&amp;nbsp;&amp;nbsp; env.workspace = workspacePath
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; # Process all layers
&amp;nbsp;&amp;nbsp;&amp;nbsp; for layer in inputLayers:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; processLayer(layer)
 
except Exception, e:
&amp;nbsp;&amp;nbsp;&amp;nbsp; # If an error occurred, print line number and error message
&amp;nbsp;&amp;nbsp;&amp;nbsp; import traceback, sys
&amp;nbsp;&amp;nbsp;&amp;nbsp; tb = sys.exc_info()[2]
&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Line %i" % tb.tb_lineno
&amp;nbsp;&amp;nbsp;&amp;nbsp; print e.message
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;I did some searchings of similar issue about python crash. Seems some cases are because of memory leak in ArcPy. I am not sure whether this applies to my case too. But would appreciate if anyone could advise some optimization tips to get around this pain.&lt;BR /&gt;&lt;BR /&gt;thanks a lot!&lt;/BLOCKQUOTE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 11 Dec 2021 20:51:59 GMT</pubDate>
    <dc:creator>SimonLeo</dc:creator>
    <dc:date>2021-12-11T20:51:59Z</dc:date>
    <item>
      <title>Python crash: arcpy standalone script for intersection analysis and summary stats</title>
      <link>https://community.esri.com/t5/python-questions/python-crash-arcpy-standalone-script-for/m-p/471451#M36791</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;the script is rather simple. Given a list of layers (point, polyline, polygon), intersect each of them with one same layer, then for each intersection result layer, do some simple summary stats including Count, Sum of one field, Count per Case (given a Case Field), and Sum per Case (given sum_field and case_field).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;the logic is to iterate each layer to intersect with the base_intersection_layer, then calculate each stat.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;when run it, very often Python crashes during the stat calculation after finishing the intersection of first layer. but sometimes when calculate the second Stat, sometimes third or the last.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;here is the script:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;# Import system modules
import arcpy
from arcpy import env
import string
import random
import time

### 
 Configuration Section
###
# data source path (full path)
workspacePath = "C:\test.gdb"
# input layers
inputLayers = []
# intersection layer
intersectionLayerName = "base_intersection"

###
 Utility Functions
###
# function to add a new layer
def addLayer(layerName):
&amp;nbsp; tmpLayer = {
&amp;nbsp;&amp;nbsp;&amp;nbsp; "LayerName": layerName,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "Stats": []
&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp; inputLayers.append(tmpLayer)

&amp;nbsp; return tmpLayer

# Stat Calculation Types
CAL_COUNT = 0
CAL_COUNT_PER_TYPE = 1
CAL_FIELD_SUM = 2
CAL_FIELD_SUM_PER_TYPE = 3

# function to add one stat output for CAL_COUNT calculation
# NOTE: must provide a count-able field, such as 'OBJECTID' as faster to count than enumerating features
def outputCount(layer, outputName, baseFieldName):
&amp;nbsp; tmpOutput = {
&amp;nbsp;&amp;nbsp;&amp;nbsp; "OutputName": outputName,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "Type": CAL_COUNT,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "BaseField": baseFieldName
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp; layer['Stats'].append(tmpOutput)

&amp;nbsp; return tmpOutput

# function to add one stat output for CAL_COUNT_PER_TYPE calculation
def outputCountPerCase(layer, outputName, baseFieldName, caseFieldName):
&amp;nbsp; tmpOutput = {
&amp;nbsp;&amp;nbsp;&amp;nbsp; "OutputName": outputName,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "Type": CAL_COUNT_PER_TYPE,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "BaseField": baseFieldName,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "CaseField": caseFieldName
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp; layer['Stats'].append(tmpOutput)

&amp;nbsp; return tmpOutput

# function to add one stat output for CAL_FIELD_SUM calculation
def outputSum(layer, outputName, baseFieldName):
&amp;nbsp; tmpOutput = {
&amp;nbsp;&amp;nbsp;&amp;nbsp; "OutputName": outputName,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "Type": CAL_FIELD_SUM,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "BaseField": baseFieldName
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp; layer['Stats'].append(tmpOutput)

&amp;nbsp; return tmpOutput

# function to add one stat output for CAL_FIELD_SUM_PER_TYPE calculation
def outputSumPerCase(layer, outputName, baseFieldName, caseFieldName):
&amp;nbsp; tmpOutput = {
&amp;nbsp;&amp;nbsp;&amp;nbsp; "OutputName": outputName,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "Type": CAL_FIELD_SUM_PER_TYPE,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "BaseField": baseFieldName,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "CaseField": caseFieldName
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp; layer['Stats'].append(tmpOutput)

&amp;nbsp; return tmpOutput

# function to generate an unique string
def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
&amp;nbsp; return ''.join(random.choice(chars) for x in range(size))

# function to delete a temp file
def deleteLayer(layerName):
&amp;nbsp; if arcpy.Exists(layerName):
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Delete_management(layerName)
&amp;nbsp;&amp;nbsp;&amp;nbsp; print 'deleted ' + layerName
&amp;nbsp; else:
&amp;nbsp;&amp;nbsp;&amp;nbsp; print layerName + ' not exist'

### 
 Feed Data
###
newLayer = addLayer("point")
# Stat: Count
outputCount(newLayer, "Count", "OBJECTID")
# Stat: Count Per Case
outputCountPerCase(newLayer, "Count Per Case", "OBJECTID", "CaseField")
# Stat: Sum
outputSum(newLayer, "Sum", "SumField")
# Stat: Sum Per Case
outputSumPerCase(newLayer, "Sum Per Case", "SumField", "CaseField")

### 
 Single Layer Processing (intersection analysis, and Stats calculation)
###
def processLayer(layer):
&amp;nbsp; tmpLayerName = layer["LayerName"]
&amp;nbsp; print "start processing layer: " + tmpLayerName
&amp;nbsp; tmpStats = layer["Stats"]

&amp;nbsp; #layer to intersect
&amp;nbsp; tmpInputLayers = [tmpLayerName, intersectionLayerName]
&amp;nbsp; 
&amp;nbsp; #generate an unique temp file for intersection results
&amp;nbsp; tmpOutputLayerName = tmpLayerName + "_output_" + id_generator()

&amp;nbsp; #do the Intersection
&amp;nbsp; arcpy.Intersect_analysis(tmpInputLayers, tmpOutputLayerName, "ALL", "", "INPUT")

&amp;nbsp; #process the outputs
&amp;nbsp; for tmpOutput in tmpOutputs:
&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; tmpOPFullName = tmpOutput["OutputName"]
 #generate an unique temp file for stat output
&amp;nbsp;&amp;nbsp;&amp;nbsp; tmpOPFileName = id_generator()
&amp;nbsp;&amp;nbsp;&amp;nbsp; tmpOPType = tmpOutput["Type"]

&amp;nbsp;&amp;nbsp;&amp;nbsp; #Stats Calculation
&amp;nbsp;&amp;nbsp;&amp;nbsp; if tmpOPType == CAL_COUNT:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; baseField = tmpOutput["BaseField"]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "count of field " + baseField
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; statsFields = [[baseField, "COUNT"]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Statistics_analysis(tmpOutputLayerName, tmpOPFileName, statsFields, "")
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; elif tmpOPType == CAL_COUNT_PER_TYPE:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; baseField = tmpOutput["BaseField"]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; caseField = tmpOutput["CaseField"] 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "count of field " + baseField + " by case field " + caseField
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; statsFields = [[baseField, "COUNT"]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Statistics_analysis(tmpOutputLayerName, tmpOPFileName, statsFields, caseField)
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; elif tmpOPType == CAL_FIELD_SUM:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; baseField = tmpOutput["BaseField"] 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "sum of field " + baseField
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; statsFields = [[baseField, "SUM"]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Statistics_analysis(tmpOutputLayerName, tmpOPFileName, statsFields, "")
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; elif tmpOPType == CAL_FIELD_SUM_PER_TYPE:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; baseField = tmpOutput["BaseField"]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; caseField = tmpOutput["CaseField"] 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "sum of field " + baseField + " by case field " + caseField
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; statsFields = [[baseField, "SUM"]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Statistics_analysis(tmpOutputLayerName, tmpOPFileName, statsFields, caseField)
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; print "finished"

&amp;nbsp;&amp;nbsp;&amp;nbsp; #TODO: export to CSV
 
&amp;nbsp;&amp;nbsp;&amp;nbsp; #delete temp output stat file
&amp;nbsp;&amp;nbsp;&amp;nbsp; deleteLayer(tmpOPFileName)

&amp;nbsp; #delete temp intersection_result layer file
&amp;nbsp; deleteLayer(tmpOutputLayerName)

### 
 Mass Processing (of all layers)
###
try:
&amp;nbsp;&amp;nbsp;&amp;nbsp; # Set the workspace (to avoid having to type in the full path to the data every time)
&amp;nbsp;&amp;nbsp;&amp;nbsp; env.workspace = workspacePath
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; # Process all layers
&amp;nbsp;&amp;nbsp;&amp;nbsp; for layer in inputLayers:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; processLayer(layer)
 
except Exception, e:
&amp;nbsp;&amp;nbsp;&amp;nbsp; # If an error occurred, print line number and error message
&amp;nbsp;&amp;nbsp;&amp;nbsp; import traceback, sys
&amp;nbsp;&amp;nbsp;&amp;nbsp; tb = sys.exc_info()[2]
&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Line %i" % tb.tb_lineno
&amp;nbsp;&amp;nbsp;&amp;nbsp; print e.message
&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I did some searchings of similar issue about python crash. Seems some cases are because of memory leak in ArcPy. I am not sure whether this applies to my case too. But would appreciate if anyone could advise some optimization tips to get around this pain.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;thanks a lot!&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 10 Nov 2013 17:02:05 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/python-crash-arcpy-standalone-script-for/m-p/471451#M36791</guid>
      <dc:creator>SimonLeo</dc:creator>
      <dc:date>2013-11-10T17:02:05Z</dc:date>
    </item>
    <item>
      <title>Re: Python crash: arcpy standalone script for intersection analysis and summary stats</title>
      <link>https://community.esri.com/t5/python-questions/python-crash-arcpy-standalone-script-for/m-p/471452#M36792</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;it seems moving following code into a separate function solves the problem.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;#process the outputs
&amp;nbsp; for tmpOutput in tmpOutputs:
&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; tmpOPFullName = tmpOutput["OutputName"]
 #generate an unique temp file for stat output
&amp;nbsp;&amp;nbsp;&amp;nbsp; tmpOPFileName = id_generator()
&amp;nbsp;&amp;nbsp;&amp;nbsp; tmpOPType = tmpOutput["Type"]

&amp;nbsp;&amp;nbsp;&amp;nbsp; #Stats Calculation
&amp;nbsp;&amp;nbsp;&amp;nbsp; if tmpOPType == CAL_COUNT:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; baseField = tmpOutput["BaseField"]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "count of field " + baseField
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; statsFields = [[baseField, "COUNT"]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Statistics_analysis(tmpOutputLayerName, tmpOPFileName, statsFields, "")
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; elif tmpOPType == CAL_COUNT_PER_TYPE:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; baseField = tmpOutput["BaseField"]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; caseField = tmpOutput["CaseField"] 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "count of field " + baseField + " by case field " + caseField
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; statsFields = [[baseField, "COUNT"]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Statistics_analysis(tmpOutputLayerName, tmpOPFileName, statsFields, caseField)
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; elif tmpOPType == CAL_FIELD_SUM:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; baseField = tmpOutput["BaseField"] 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "sum of field " + baseField
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; statsFields = [[baseField, "SUM"]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Statistics_analysis(tmpOutputLayerName, tmpOPFileName, statsFields, "")
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; elif tmpOPType == CAL_FIELD_SUM_PER_TYPE:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; baseField = tmpOutput["BaseField"]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; caseField = tmpOutput["CaseField"] 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "sum of field " + baseField + " by case field " + caseField
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; statsFields = [[baseField, "SUM"]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Statistics_analysis(tmpOutputLayerName, tmpOPFileName, statsFields, caseField)
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; print "finished"

&amp;nbsp;&amp;nbsp;&amp;nbsp; #TODO: export to CSV&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;the script is rather simple. Given a list of layers (point, polyline, polygon), intersect each of them with one same layer, then for each intersection result layer, do some simple summary stats including Count, Sum of one field, Count per Case (given a Case Field), and Sum per Case (given sum_field and case_field).&lt;BR /&gt;&lt;BR /&gt;the logic is to iterate each layer to intersect with the base_intersection_layer, then calculate each stat.&lt;BR /&gt;&lt;BR /&gt;when run it, very often Python crashes during the stat calculation after finishing the intersection of first layer. but sometimes when calculate the second Stat, sometimes third or the last.&lt;BR /&gt;&lt;BR /&gt;here is the script:&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;# Import system modules
import arcpy
from arcpy import env
import string
import random
import time

### 
 Configuration Section
###
# data source path (full path)
workspacePath = "C:\test.gdb"
# input layers
inputLayers = []
# intersection layer
intersectionLayerName = "base_intersection"

###
 Utility Functions
###
# function to add a new layer
def addLayer(layerName):
&amp;nbsp; tmpLayer = {
&amp;nbsp;&amp;nbsp;&amp;nbsp; "LayerName": layerName,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "Stats": []
&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp; inputLayers.append(tmpLayer)

&amp;nbsp; return tmpLayer

# Stat Calculation Types
CAL_COUNT = 0
CAL_COUNT_PER_TYPE = 1
CAL_FIELD_SUM = 2
CAL_FIELD_SUM_PER_TYPE = 3

# function to add one stat output for CAL_COUNT calculation
# NOTE: must provide a count-able field, such as 'OBJECTID' as faster to count than enumerating features
def outputCount(layer, outputName, baseFieldName):
&amp;nbsp; tmpOutput = {
&amp;nbsp;&amp;nbsp;&amp;nbsp; "OutputName": outputName,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "Type": CAL_COUNT,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "BaseField": baseFieldName
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp; layer['Stats'].append(tmpOutput)

&amp;nbsp; return tmpOutput

# function to add one stat output for CAL_COUNT_PER_TYPE calculation
def outputCountPerCase(layer, outputName, baseFieldName, caseFieldName):
&amp;nbsp; tmpOutput = {
&amp;nbsp;&amp;nbsp;&amp;nbsp; "OutputName": outputName,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "Type": CAL_COUNT_PER_TYPE,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "BaseField": baseFieldName,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "CaseField": caseFieldName
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp; layer['Stats'].append(tmpOutput)

&amp;nbsp; return tmpOutput

# function to add one stat output for CAL_FIELD_SUM calculation
def outputSum(layer, outputName, baseFieldName):
&amp;nbsp; tmpOutput = {
&amp;nbsp;&amp;nbsp;&amp;nbsp; "OutputName": outputName,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "Type": CAL_FIELD_SUM,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "BaseField": baseFieldName
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp; layer['Stats'].append(tmpOutput)

&amp;nbsp; return tmpOutput

# function to add one stat output for CAL_FIELD_SUM_PER_TYPE calculation
def outputSumPerCase(layer, outputName, baseFieldName, caseFieldName):
&amp;nbsp; tmpOutput = {
&amp;nbsp;&amp;nbsp;&amp;nbsp; "OutputName": outputName,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "Type": CAL_FIELD_SUM_PER_TYPE,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "BaseField": baseFieldName,
&amp;nbsp;&amp;nbsp;&amp;nbsp; "CaseField": caseFieldName
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp; layer['Stats'].append(tmpOutput)

&amp;nbsp; return tmpOutput

# function to generate an unique string
def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
&amp;nbsp; return ''.join(random.choice(chars) for x in range(size))

# function to delete a temp file
def deleteLayer(layerName):
&amp;nbsp; if arcpy.Exists(layerName):
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Delete_management(layerName)
&amp;nbsp;&amp;nbsp;&amp;nbsp; print 'deleted ' + layerName
&amp;nbsp; else:
&amp;nbsp;&amp;nbsp;&amp;nbsp; print layerName + ' not exist'

### 
 Feed Data
###
newLayer = addLayer("point")
# Stat: Count
outputCount(newLayer, "Count", "OBJECTID")
# Stat: Count Per Case
outputCountPerCase(newLayer, "Count Per Case", "OBJECTID", "CaseField")
# Stat: Sum
outputSum(newLayer, "Sum", "SumField")
# Stat: Sum Per Case
outputSumPerCase(newLayer, "Sum Per Case", "SumField", "CaseField")

### 
 Single Layer Processing (intersection analysis, and Stats calculation)
###
def processLayer(layer):
&amp;nbsp; tmpLayerName = layer["LayerName"]
&amp;nbsp; print "start processing layer: " + tmpLayerName
&amp;nbsp; tmpStats = layer["Stats"]

&amp;nbsp; #layer to intersect
&amp;nbsp; tmpInputLayers = [tmpLayerName, intersectionLayerName]
&amp;nbsp; 
&amp;nbsp; #generate an unique temp file for intersection results
&amp;nbsp; tmpOutputLayerName = tmpLayerName + "_output_" + id_generator()

&amp;nbsp; #do the Intersection
&amp;nbsp; arcpy.Intersect_analysis(tmpInputLayers, tmpOutputLayerName, "ALL", "", "INPUT")

&amp;nbsp; #process the outputs
&amp;nbsp; for tmpOutput in tmpOutputs:
&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; tmpOPFullName = tmpOutput["OutputName"]
 #generate an unique temp file for stat output
&amp;nbsp;&amp;nbsp;&amp;nbsp; tmpOPFileName = id_generator()
&amp;nbsp;&amp;nbsp;&amp;nbsp; tmpOPType = tmpOutput["Type"]

&amp;nbsp;&amp;nbsp;&amp;nbsp; #Stats Calculation
&amp;nbsp;&amp;nbsp;&amp;nbsp; if tmpOPType == CAL_COUNT:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; baseField = tmpOutput["BaseField"]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "count of field " + baseField
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; statsFields = [[baseField, "COUNT"]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Statistics_analysis(tmpOutputLayerName, tmpOPFileName, statsFields, "")
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; elif tmpOPType == CAL_COUNT_PER_TYPE:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; baseField = tmpOutput["BaseField"]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; caseField = tmpOutput["CaseField"] 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "count of field " + baseField + " by case field " + caseField
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; statsFields = [[baseField, "COUNT"]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Statistics_analysis(tmpOutputLayerName, tmpOPFileName, statsFields, caseField)
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; elif tmpOPType == CAL_FIELD_SUM:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; baseField = tmpOutput["BaseField"] 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "sum of field " + baseField
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; statsFields = [[baseField, "SUM"]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Statistics_analysis(tmpOutputLayerName, tmpOPFileName, statsFields, "")
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; elif tmpOPType == CAL_FIELD_SUM_PER_TYPE:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; baseField = tmpOutput["BaseField"]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; caseField = tmpOutput["CaseField"] 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "sum of field " + baseField + " by case field " + caseField
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; statsFields = [[baseField, "SUM"]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Statistics_analysis(tmpOutputLayerName, tmpOPFileName, statsFields, caseField)
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; print "finished"

&amp;nbsp;&amp;nbsp;&amp;nbsp; #TODO: export to CSV
 
&amp;nbsp;&amp;nbsp;&amp;nbsp; #delete temp output stat file
&amp;nbsp;&amp;nbsp;&amp;nbsp; deleteLayer(tmpOPFileName)

&amp;nbsp; #delete temp intersection_result layer file
&amp;nbsp; deleteLayer(tmpOutputLayerName)

### 
 Mass Processing (of all layers)
###
try:
&amp;nbsp;&amp;nbsp;&amp;nbsp; # Set the workspace (to avoid having to type in the full path to the data every time)
&amp;nbsp;&amp;nbsp;&amp;nbsp; env.workspace = workspacePath
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; # Process all layers
&amp;nbsp;&amp;nbsp;&amp;nbsp; for layer in inputLayers:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; processLayer(layer)
 
except Exception, e:
&amp;nbsp;&amp;nbsp;&amp;nbsp; # If an error occurred, print line number and error message
&amp;nbsp;&amp;nbsp;&amp;nbsp; import traceback, sys
&amp;nbsp;&amp;nbsp;&amp;nbsp; tb = sys.exc_info()[2]
&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Line %i" % tb.tb_lineno
&amp;nbsp;&amp;nbsp;&amp;nbsp; print e.message
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;I did some searchings of similar issue about python crash. Seems some cases are because of memory leak in ArcPy. I am not sure whether this applies to my case too. But would appreciate if anyone could advise some optimization tips to get around this pain.&lt;BR /&gt;&lt;BR /&gt;thanks a lot!&lt;/BLOCKQUOTE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 20:51:59 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/python-crash-arcpy-standalone-script-for/m-p/471452#M36792</guid>
      <dc:creator>SimonLeo</dc:creator>
      <dc:date>2021-12-11T20:51:59Z</dc:date>
    </item>
  </channel>
</rss>

