אתם צופים במסמכי התיעוד של Apigee ושל Apigee 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 Script יכולה להחזיר כמה סוגים שונים של שגיאות 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" } } }
אבחון
מזהים את מדיניות PythonScript ואת שם המשתנה הלא מוגדר מרכיב faultstring של תגובת השגיאה. לדוגמה, במחרוזת השגיאה הבאה, שם ה-PythonScript הוא
myscript.pyושם המשתנה הלא מוגדר הוא num3:"faultstring": "Evaluation of script myscript.py (py) failed with reason: "NameError: 'num3' is not defined""
בודקים את קובץ המקור של 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))
בודקים אם המשתנה הספציפי מוגדר בקוד 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" } } }
אבחון
מזהים את שם המדיניות של 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""
בודקים את קובץ המקור של 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.