Resolução de problemas de erros de tempo de execução da política PythonScript

Está a ver a documentação do Apigee e do Apigee Hybrid.
Ver documentação do Apigee Edge.

ScriptEvaluationFailed

Código de 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 de scripts Python pode gerar vários tipos diferentes de erros ScriptEvaluationFailed. As secções abaixo descrevem alguns destes erros.

NameError

Se existir uma variável no código PythonScript que seja referenciada ou operada sem ser definida, recebe o erro de nome.

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 faultstring da resposta de erro. Por exemplo, na seguinte faultstring, 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 ficheiro de origem PythonScript identificado no passo n.º 1 acima e verifique se a variável indefinida identificada no passo n.º 1 acima está a ser referenciada. Por exemplo, o seguinte código PythonScript faz referência à variável indefinida num3, que corresponde a 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. Verifique se a variável específica está definida no código PythonScript. Se a variável não estiver definida, essa é a causa do erro.

    No script de exemplo apresentado acima, a variável num3 não está definida. Por conseguinte, recebe o erro abaixo:

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

Resolução

Certifique-se de que todas as variáveis referenciadas no código PythonScript estão devidamente definidas.

Para corrigir o problema com o PythonScript de exemplo apresentado acima, defina a variável num3 antes de a usar. Por 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

Este erro é apresentado 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 faultstring da resposta de erro. Por exemplo, na faultstring seguinte, 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 ficheiro de origem PythonScript identificado no passo n.º 1 acima e verifique se existe uma divisão ou uma operação de módulo por zero. Por exemplo, o seguinte código PythonScript realiza uma divisão por zero, que corresponde ao que está em faultstring:

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

    No exemplo de script apresentado acima, uma vez que o segundo argumento da operação de divisão é zero, recebe o seguinte erro:

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

Resolução

Certifique-se de que o segundo argumento de uma operação de divisão ou módulo não é zero no PythonScript.

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

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

Mais informações

Existem muitas outras causas possíveis para o erro steps.script.ScriptEvaluationFailed, além das descritas acima. Consulte a documentação oficial do Python para mais informações.