Khắc phục lỗi thời gian chạy chính sách PythonScript

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến tài liệu về Apigee X.
thông tin

ScriptEvaluationFailed

Mã lỗi

steps.script.ScriptEvaluationFailed

Nội dung phản hồi lỗi

{
    "fault": {
        "faultstring": "Evaluation of script pythonscript_name (py) failed with reason: error_type: error_description"",
        "detail": {
            "errorcode": "steps.script.ScriptEvaluationFailed"
        }
    }
}

Các nguyên nhân có thể

Chính sách Python Script có thể tạo một số loại lỗi ScriptEvaluationFailed khác nhau. Các phần dưới đây mô tả một số lỗi này.

NameError

Nếu có một biến trong mã PythonScript được tham chiếu hoặc hoạt động mà không được xác định, thì bạn sẽ gặp lỗi Tên.

Nội dung phản hồi lỗi

{
    "fault": {
        "faultstring": "Evaluation of script pythonscript_name (py) failed with reason: "NameError: variable_name is not defined"",
        "detail": {
            "errorcode": "steps.script.ScriptEvaluationFailed"
        }
    }
}

Ví dụ về nội dung phản hồi lỗi

{
    "fault": {
        "faultstring": "Evaluation of script myscript.py (py) failed with reason: "NameError: 'num3' is not defined"",
        "detail": {
            "errorcode": "steps.script.ScriptEvaluationFailed"
        }
    }
}

Chẩn đoán

  1. Xác định chính sách PythonScript và tên biến không xác định từ phần tử chuỗi lỗi của phản hồi lỗi. Ví dụ: trong chuỗi lỗi sau, tên PythonScript là myscript.py và tên biến không xác định là num3:

    "faultstring": "Evaluation of script myscript.py (py) failed with reason: "NameError: 'num3' is not defined""
    
  2. Kiểm tra tệp nguồn PythonScript được xác định ở bước #1 ở trên và xác minh xem biến không xác định được xác định ở bước #1 ở trên có đang được tham chiếu hay không. Ví dụ: đoạn mã PythonScript sau đây tham chiếu đến biến không xác định num3, biến này khớp với 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. Kiểm tra xem biến cụ thể có được xác định trong mã PythonScript hay không. Nếu biến không được xác định, thì đó chính là nguyên nhân gây ra lỗi.

    Trong tập lệnh ví dụ ở trên, biến num3 là không xác định. Do đó, bạn sẽ gặp lỗi dưới đây:

    "faultstring": "Evaluation of script myscript.py (py) failed with reason: "NameError: 'num3' is not defined""
    

Độ phân giải

Đảm bảo rằng tất cả các biến được tham chiếu trong mã PythonScript đều được xác định đúng.

Để khắc phục vấn đề trong ví dụ về PythonScript ở trên, hãy xác định biến num3 trước khi sử dụng biến đó. Ví dụ:

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

Lỗi này xuất hiện khi đối số thứ hai của phép chia hoặc phép mô-đun bằng 0.

Nội dung phản hồi lỗi


{
    "fault": {
        "faultstring": "Evaluation of script pythonscript_name (py) failed with reason: "ZeroDivisionError: reason_for_error"",
        "detail": {
            "errorcode": "steps.script.ScriptEvaluationFailed"
        }
    }
}

Ví dụ về nội dung phản hồi lỗi


{
    "fault": {
        "faultstring": "Evaluation of script myscript.py (py) failed with reason: "ZeroDivisionError: integer division or modulo by zero"",
        "detail": {
            "errorcode": "steps.script.ScriptEvaluationFailed"
        }
    }
}

Chẩn đoán

  1. Xác định tên chính sách PythonScript và lý do lỗi do phần tử chuỗi lỗi của phản hồi lỗi. Ví dụ: trong chuỗi lỗi sau, tên PythonScript là myscript.py và lý do không thành công là integer division or modulo by zero:

    "faultstring": "Evaluation of script myscript.py (py) failed with reason: "ZeroDivisionError: integer division or modulo by zero""
    
  2. Kiểm tra tệp nguồn PythonScript xác định ở bước #1 ở trên và xác minh xem có phép chia hoặc toán tử mô-đun bằng 0 hay không. Ví dụ: mã PythonScript sau đây thực hiện phép chia cho 0, khớp với nội dung trong chuỗi lỗi:

    a = 0
    b = 5
    c = b/a
    print c
    

    Trong tập lệnh ví dụ ở trên, vì đối số thứ hai của phép chia bằng 0, nên bạn sẽ gặp lỗi sau:

    "faultstring": "Evaluation of script myscript.py (py) failed with reason: "ZeroDivisionError: integer division or modulo by zero""
    

Độ phân giải

Đảm bảo rằng đối số thứ hai của phép chia hoặc modulo khác 0 trong PythonScript.

Để khắc phục vấn đề với ví dụ về PythonScript ở trên, hãy sử dụng một giá trị khác 0 làm đối số thứ hai của phép chia hoặc modulo. Ví dụ:

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

Thông tin khác

Có nhiều nguyên nhân có thể khác gây ra lỗi steps.script.ScriptEvaluationFailed ngoài những nguyên nhân được mô tả ở trên. Vui lòng tham khảo tài liệu chính thức về Python để biết thêm thông tin.