การแก้ปัญหาข้อผิดพลาดของรันไทม์นโยบาย 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 ของการตอบสนองข้อผิดพลาด ตัวอย่างเช่น ในสตริงข้อผิดพลาดต่อไปนี้ ชื่อ 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

ข้อผิดพลาดนี้จะเกิดขึ้นเมื่ออาร์กิวเมนต์ที่สองของการดำเนินการหารหรือโมดูโลเป็น 0

เนื้อหาการตอบกลับข้อผิดพลาด


{
    "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 ด้านบนและตรวจสอบว่ามีการดำเนินการ division หรือโมดูลัสที่ 0 หรือไม่ ตัวอย่างเช่น โค้ด PythonScript ต่อไปนี้ทำการหารด้วย 0 ซึ่งตรงกับสิ่งที่อยู่ใน 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""
    

ความละเอียด

ตรวจสอบว่าอาร์กิวเมนต์ที่ 2 ของการดำเนินการ Division หรือ Moulo ไม่ได้เป็น 0 ใน PythonScript

หากต้องการแก้ไขปัญหาในตัวอย่าง PythonScript ที่แสดงด้านบน ให้ใช้ค่าที่ไม่ใช่ 0 เป็นอาร์กิวเมนต์ที่ 2 ของการดำเนินการ Division หรือ Moulo เช่น

a = 3
b = 5
c = b/a
print c

ข้อมูลเพิ่มเติม

นอกเหนือจากสาเหตุที่อธิบายไว้ข้างต้นแล้ว ยังมีสาเหตุที่เป็นไปได้อีกหลายข้อที่ทำให้เกิดข้อผิดพลาด steps.script.ScriptEvaluationFailed โปรดดูเอกสารประกอบ Python อย่างเป็นทางการสำหรับข้อมูลเพิ่มเติม