Устранение неполадок с ошибками выполнения правил PythonScript

Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X.
Информация

ScriptEvaluationFailed

Код ошибки

steps.script.ScriptEvaluationFailed

Тело ответа с ошибкой

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

Возможные причины

Правила в отношении скриптов Python могут вызывать ошибки ScriptEvaluationFailed разных типов. Ниже описаны некоторые из этих ошибок.

NameError

Если в коде PythonScript есть переменная, на которую ссылаются или с которой выполняют операции, но она не определена, то возникает ошибка Name.

Тело ответа с ошибкой

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

Пример текста ответа с ошибкой

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

диагностика;

  1. Определите правило PythonScript и название неопределенной переменной по элементу faultstring в ответе об ошибке. Например, в следующей строке ошибки имя PythonScript – myscript.py, а имя неопределенной переменной – num3:

    "faultstring": "Evaluation of script myscript.py (py) failed with reason: "NameError: 'num3' is not defined""
  2. Проверьте исходный файл PythonScript, указанный на шаге 1, и убедитесь, что неопределенная переменная, указанная на шаге 1, не используется. Например, в следующем коде PythonScript есть ссылка на неопределенную переменную num3, которая соответствует 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. Проверьте, определена ли нужная переменная в коде PythonScript. Если переменная не определена, это и будет причиной ошибки.

    В примере скрипта выше переменная num3 не определена. Поэтому вы получите ошибку, указанную ниже.

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

Разрешение

Убедитесь, что все переменные, на которые ссылается код PythonScript, определены правильно.

Чтобы исправить проблему в приведенном выше примере PythonScript, определите переменную num3 до ее использования. Пример:

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

Эта ошибка возникает, когда второй аргумент операции деления или вычисления остатка от деления равен нулю.

Тело ответа с ошибкой

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

Пример текста ответа с ошибкой

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

диагностика;

  1. Определите название правила PythonScript и причину ошибки по элементу faultstring в ответе об ошибке. Например, в следующей строке ошибки имя скрипта Python – myscript.py, а причина ошибки – integer division or modulo by zero:

    "faultstring": "Evaluation of script myscript.py (py) failed with reason: "ZeroDivisionError: integer division or modulo by zero""
  2. Изучите исходный файл PythonScript, указанный на шаге 1, и проверьте, есть ли в нем операция деления или взятия остатка от деления на ноль. Например, следующий код PythonScript выполняет деление на ноль, что соответствует строке faultstring:

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

    В приведенном выше примере скрипта второй аргумент операции деления равен нулю, поэтому возникает следующая ошибка:

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

Разрешение

Убедитесь, что второй аргумент операции деления или вычисления остатка от деления в PythonScript не равен нулю.

Чтобы исправить проблему в приведенном выше примере PythonScript, используйте ненулевое значение в качестве второго аргумента операции деления или вычисления остатка. Пример:

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

Дополнительная информация

Помимо описанных выше причин, ошибка steps.script.ScriptEvaluationFailed может возникать и по другим причинам. Дополнительную информацию можно найти в официальной документации по Python.