Solução de problemas de erro de ambiente de execução de política do PythonScript

Esta é a documentação da Apigee e da Apigee híbrida.
Confira a documentação da Apigee Edge.

ScriptEvaluationFailed

Código do erro

steps.script.ScriptEvaluationFailed

Corpo da resposta de erro

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

Causas possíveis

A política Python Script pode gerar vários tipos diferentes de erros ScriptEvaluationFailed. As seções abaixo descrevem alguns desses erros.

NameError

Se houver uma variável no código do PythonScript que é referenciada ou operada sem ser definida, você receberá o erro Name.

Corpo da resposta de erro

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

Exemplo de corpo da resposta de erro

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

Diagnóstico

  1. Identifique a política PythonScript e o nome da variável indefinida no elemento failurestring da resposta de erro. Por exemplo, na seguinte string de falha, o nome do PythonScript é myscript.py e o nome da variável indefinida é num3:

    "faultstring": "Evaluation of script myscript.py (py) failed with reason: "NameError: 'num3' is not defined""
  2. Examine o arquivo de origem do PythonScript identificado na etapa 1 acima e verifique se a variável indefinida identificada na etapa 1 acima está sendo referenciada. Por exemplo, o código PythonScript a seguir faz referência à variável indefinida num3, que corresponde à string de falha:

    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. Verifique se a variável específica foi definida no código PythonScript. Se a variável não estiver definida, essa será a causa do erro.

    No script de exemplo mostrado acima, a variável num3 é indefinida. Portanto, você receberá o seguinte erro:

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

Resolução

Verifique se todas as variáveis referenciadas no código PhytonScript estão definidas corretamente.

Para corrigir o problema com o PythonScript de exemplo acima, defina a variável num3 antes de usá-la. Exemplo:

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

Esse erro é gerado quando o segundo argumento de uma operação de divisão ou módulo é zero.

Corpo da resposta de erro

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

Exemplo de corpo da resposta de erro

{
    "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. Identifique o nome da política PythonScript e o motivo da falha no elemento failurestring da resposta de erro. Por exemplo, na seguinte failurestring, o nome do PythonScript é myscript.py e o motivo da falha é integer division or modulo by zero:

    "faultstring": "Evaluation of script myscript.py (py) failed with reason: "ZeroDivisionError: integer division or modulo by zero""
  2. Examine o arquivo de origem do PythonScript identificado na etapa 1 acima e verifique se há uma operação de divisão ou módulo por zero. Por exemplo, o código Python do seguinte script realiza a divisão por zero, que corresponde ao que está na string de falha:

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

    No exemplo de script mostrado acima, como o segundo argumento da operação de divisão é zero, você recebe o seguinte erro:

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

Resolução

Garanta que o segundo argumento de uma operação de divisão ou módulo não seja zero no PythonScript.

Para corrigir o problema com o PythonScript de exemplo mostrado acima, use um valor diferente de zero como o segundo argumento de uma operação de divisão ou módulo. Exemplo:

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

Mais informações

Há muitas outras causas possíveis para o erro steps.script.ScriptEvaluationFailed além daquelas descritas acima. Para mais informações, consulte a documentação oficial do Python.