排解 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 Script 政策可以 擲回幾種不同類型的 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. 從錯誤回應的錯誤字串元素中找出 PythonScript 政策和未定義的變數名稱。例如,在下列錯誤字串中,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. 找出 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 程式碼會執行除以零的運算,這與錯誤字串中的內容相符:

    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 說明文件