פתרון בעיות בזמן ריצה של מדיניות 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, שתואם ל-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))
    
  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.