פתרון בעיות בזמן ריצה של מדיניות PythonScript

מוצג המסמך של 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"
        }
    }
}

אבחון

  1. מאתרים את מדיניות PythonScript ואת שם המשתנה הלא מוגדר מרכיב ה-faultstring של תגובת השגיאה. לדוגמה, במחרוזת השגיאה הבאה, השם של PythonScript הוא myscript.py ושם המשתנה הלא מוגדר הוא num3:

    "faultstring": "Evaluation of script myscript.py (py) failed with reason: "NameError: 'num3' is not defined""
  2. בודקים את קובץ המקור של PythonScript שזוהה בשלב 1 למעלה ומוודאים שיש הפניה למשתנה הלא מוגדר שזוהה בשלב 1 שלמעלה. לדוגמה, קוד PythonScript הבא מפנה למשתנה הלא מוגדר num3, שתואם למחרוזת השגיאה:

    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

השגיאה הזו נוצרת כאשר הארגומנט השני של פעולת חלוקה או מודולו הוא אפס.

גוף התגובה לשגיאה

{
    "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. מזהים את שם המדיניות של 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. בודקים את קובץ המקור של 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.