Quantcast
Channel: Forums - Python
Viewing all articles
Browse latest Browse all 2485

Multivalue parameter as text in .pyt - reading in to imported module function

$
0
0
I'm building a Python toolbox with a tool which calls specific functions from a custom module.

The main input parameter for this tool is a multivalue list of raster layers.

In the execute block of my tool, I use parameter[2].valueAsText to read in said parameter, as normal, and then feed it into a custom module function as follows:

Code:

output          = parameters[0].valueAsText
input          = parameters[2].valueAsText
function        = parameters[1].valueAsText
functionname    = "Local" + function
option          = parameters[3].valueAsText
expression      = parameters[4].valueAsText

newGrid = getattr(localfuncs,functionname)(input,option,expression)
newGrid.save(output)

In this case, I've tested it with one custom function (corresponding to 'functionname'):

Code:

def LocalMean(input,option,expression):
    import arcpy
    newGrid = arcpy.sa.CellStatistics(input,"MEAN")
    return newGrid

The trouble is that the 'input' (multivalue read in as text) ends up being a semicolon-delimited string of file names, and the function in the custom module can't seem to convert it back to a list of raster layers for Cell Statistics to actually process. As a result I get this error:

Script failed because: ERROR 000732: Input Raster: Dataset Development;Vegetation;Hydrology;Elevation does not exist or is not supported at this location:

I've tried reading in 'input' with .values instead of .valueAsText, so it comes in as a list, but then I get the error that 'cannot concatenate 'str' and 'list' objects' in the getattr line.

Any ideas what I can do about this?

I know this overall structure may seem unnecessarily complicated; but it's a key part of the bigger project. I'm not attached to specifically using getattr here, but solutions which preserve the basic structure, namely calling functions from a custom module using a string of the function's name, would be ideal. Thanks a lot!

Viewing all articles
Browse latest Browse all 2485

Trending Articles