عیب‌یابی خطای زمان اجرای خط‌مشی 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 می‌تواند چندین نوع مختلف از خطاهای ScriptEvaluationFailed را ایجاد کند. بخش‌های زیر برخی‌از این خطاها را توضیح می‌دهد.

NameError

اگر متغیری در کد PythonScript وجود داشته باشد که بدون تعریف شدن به آن ارجاع داده شده یا روی آن عملیات انجام شده باشد، خطای «نام» دریافت می‌کنید.

متن پاسخ خطا

{
    "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 پاسخ خطا شناسایی کنید. برای مثال، در faultstring زیر، نام PythonScript myscript.py و نام متغیر تعریف‌نشده num3 است:

    "faultstring": "Evaluation of script myscript.py (py) failed with reason: "NameError: 'num3' is not defined""
  2. فایل منبع PythonScript شناسایی‌شده در مرحله ۱ بالا را بررسی کنید و تأیید کنید که آیا متغیر تعریف‌نشده شناسایی‌شده در مرحله ۱ بالا ارجاع داده می‌شود یا نه. برای مثال، کد 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 پاسخ خطا شناسایی کنید. برای مثال، در 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 شناسایی‌شده در مرحله ۱ بالا را بررسی کنید و مطمئن شوید که عملیات تقسیم یا پیمانه‌ای بر صفر وجود ندارد. برای مثال، کد 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 مراجعه کنید.