現在、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 コードで、定義されずに参照または動作する変数がある場合、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" } } }
診断
エラー レスポンスの faultstring 要素から、PythonScript ポリシーと未定義の変数名を特定します。たとえば、次の faultstring では、PythonScript 名が
myscript.py
で、未定義の変数名は num3 です。"faultstring": "Evaluation of script myscript.py (py) failed with reason: "NameError: 'num3' is not defined""
上記のステップ 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))
その特定の変数が 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" } } }
診断
エラー レスポンスの 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""
上記のステップ 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 ドキュメントをご覧ください。