כרגע מוצג התיעוד של 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 שאליו יש הפניה או משתנה ללא הגדרה, תתקבל שגיאת 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.