Solución de problemas de entorno de ejecución de la política de PythonScript

Estás viendo la documentación de Apigee X.
Consulta la documentación de Apigee Edge.

ScriptEvaluationFailed

Código de error

steps.script.ScriptEvaluationFailed

Cuerpo de la respuesta del error

{
    "fault": {
        "faultstring": "Evaluation of script pythonscript_name (py) failed with reason: error_type: error_description"",
        "detail": {
            "errorcode": "steps.script.ScriptEvaluationFailed"
        }
    }
}

Causas posibles

La política de Secuencia de comandos de Python puede generar varios tipos diferentes de errores ScriptEvaluationFailed. En las secciones siguientes, se describen algunos de estos errores.

NameError

Si hay una variable en el código de PythonScript a la que se hace referencia o que se opera sin definirse, se mostrará el error de nombre.

Cuerpo de la respuesta de error

{
    "fault": {
        "faultstring": "Evaluation of script pythonscript_name (py) failed with reason: "NameError: variable_name is not defined"",
        "detail": {
            "errorcode": "steps.script.ScriptEvaluationFailed"
        }
    }
}

Cuerpo de la respuesta de error de ejemplo

{
    "fault": {
        "faultstring": "Evaluation of script myscript.py (py) failed with reason: "NameError: 'num3' is not defined"",
        "detail": {
            "errorcode": "steps.script.ScriptEvaluationFailed"
        }
    }
}

Diagnóstico

  1. Identifica la política PythonScript y el nombre de variable no definida del elemento faultstring de la respuesta de error. Por ejemplo, en la siguiente faultstring, el nombre de PythonScript es myscript.py y el nombre de la variable no definida es num3:

    "faultstring": "Evaluation of script myscript.py (py) failed with reason: "NameError: 'num3' is not defined""
    
  2. Examina el archivo fuente de PythonScript identificado en el paso 1 anterior y verifica si se hace referencia a la variable no definida en el paso 1. Por ejemplo, el siguiente código de PythonScript hace referencia a la variable sin definir num3, que coincide con la faultstring:

    num1 = 1.5
    num2 = 6.3
    sum = float(num1) + float(num3)
    print('The sum of {0} and {1} is {2}'.format(num1, num3 sum))
    
  3. Verifica si la variable específica se define en el código de PythonScrip. Si la variable no está definida, esa es la causa del error.

    En la secuencia de comandos de ejemplo anterior, la variable num3 no está definida. Por lo tanto, verás el siguiente error:

    "faultstring": "Evaluation of script myscript.py (py) failed with reason: "NameError: 'num3' is not defined""
    

Solución

Asegúrate de que todas las variables a las que se hace referencia en el código PythonScript estén definidas correctamente.

Para solucionar el problema con el ejemplo de PythonScript que se muestra arriba, define la variable num3 antes de usarla. Por ejemplo:

num1 = 1.5
num2 = 6.3
num3 = 8.7
sum = float(num1) + float(num3)
print('The sum of {0} and {1} is {2}'.format(num1, num3, sum))

ZeroDivisionError

Este error se genera cuando el segundo argumento de una operación de división o módulo es cero.

Cuerpo de la respuesta de error


{
    "fault": {
        "faultstring": "Evaluation of script pythonscript_name (py) failed with reason: "ZeroDivisionError: reason_for_error"",
        "detail": {
            "errorcode": "steps.script.ScriptEvaluationFailed"
        }
    }
}

Cuerpo de la respuesta de error de ejemplo


{
    "fault": {
        "faultstring": "Evaluation of script myscript.py (py) failed with reason: "ZeroDivisionError: integer division or modulo by zero"",
        "detail": {
            "errorcode": "steps.script.ScriptEvaluationFailed"
        }
    }
}

Diagnóstico

  1. Identifica el nombre de la política de PythonScript y el motivo del error en el elemento faultstring de la respuesta de error. Por ejemplo, en la siguiente faultstring, el nombre de PythonScript es myscript.py y el motivo del error es integer division or modulo by zero:

    "faultstring": "Evaluation of script myscript.py (py) failed with reason: "ZeroDivisionError: integer division or modulo by zero""
    
  2. Examina el archivo fuente de PythonScript identificado en el paso 1 anterior y verifica si hay una división o una operación de módulo por cero. Por ejemplo, el siguiente código de PythonScript realiza una división por cero, que coincide con lo que hay en la string de fallas:

    a = 0
    b = 5
    c = b/a
    print c
    

    En la secuencia de comandos de ejemplo anterior, debido a que el segundo argumento de la operación de división es cero, obtendrás el siguiente error:

    "faultstring": "Evaluation of script myscript.py (py) failed with reason: "ZeroDivisionError: integer division or modulo by zero""
    

Solución

Asegúrate de que el segundo argumento de una operación de división o módulo no sea cero en PythonScript.

Para corregir el problema con el ejemplo de PythonScript que se muestra arriba, usa un valor distinto de cero como el segundo argumento de una división o una operación de módulo. Por ejemplo:

a = 3
b = 5
c = b/a
print c

Más información

Existen muchas otras causas posibles para el error steps.script.ScriptEvaluationFailed, además de las descritas anteriormente. Consulta la documentación oficial de Python para obtener más información.