PythonScript ポリシーのランタイム エラーに関するトラブルシューティング

現在は、ApigeeApigee ハイブリッドのドキュメントが表示されています。
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 コードで、定義されずに参照または動作する変数がある場合、NameError が発生します。

エラー レスポンスの本文

{
    "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:

このエラーは、除算または剰余演算の 2 番目の引数がゼロである場合に発生します。

エラー レスポンスの本文


{
    "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
    

    上記のスクリプトの例では、除算演算の 2 番目の引数がゼロであるため、次のエラーが表示されます。

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

解決策

PythonScript で、除算または余剰演算の 2 番目の引数がゼロ以外であることを確認します。

上記の PythonScript の例の問題を解決するには、除算または剰余計算の 2 番目の引数としてゼロ以外の値を使用します。次に例を示します。

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

より詳しく

エラー(steps.script.ScriptEvaluationFailed)は、上記以外にもさまざまな原因で発生します。詳しくは、公式の Python ドキュメントをご覧ください。