排解 PythonScript 政策執行階段錯誤的問題

您目前查看的是 ApigeeApigee Hybrid 說明文件。
查看 Apigee Edge 說明文件。

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 程式碼中有變數在未定義的情況下遭到參照或運算,就會發生名稱錯誤。

錯誤回應主體

{
    "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. 從錯誤回應的 faultstring 元素中,找出 PythonScript 政策和未定義的變數名稱。舉例來說,在下列 faultstring 中,PythonScript 名稱為 myscript.py,未定義的變數名稱為 num3

    "faultstring": "Evaluation of script myscript.py (py) failed with reason: "NameError: 'num3' is not defined""
  2. 檢查上述步驟 1 中識別的 PythonScript 來源檔案,並確認是否參照上述步驟 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. 從錯誤回應的 faultstring 元素中,找出 PythonScript 政策名稱和失敗原因。舉例來說,在下列 faultstring 中,PythonScript 名稱為 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. 檢查上述步驟 1 中識別的 PythonScript 來源檔案,確認是否有除以零或模數為零的運算。舉例來說,下列 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 說明文件