הדף הזה רלוונטי ל-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 של תגובת השגיאה. לדוגמה, ב-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.