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.
Truy cập vào tài liệu 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 Tập lệnh Python có thể đưa ra nhiều loại lỗi ScriptEvaluationFailed khác nhau. Các phần dưới đây mô tả một số lỗi trong số 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 Name.

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 chưa xác định trong phần tử faultstring của phản hồi lỗi. Ví dụ: trong faultstring 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 chưa xác định được xác định ở bước 1 ở trên có đang được tham chiếu hay không. Ví dụ: mã PythonScript sau đây tham chiếu đến biến chưa xác định num3, 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ì đó là nguyên nhân gây ra lỗi.

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

    "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 cách.

Để khắc phục vấn đề với ví dụ về PythonScript nêu 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 xảy ra khi đối số thứ hai của phép chia hoặc phép toán modulo là 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 thất bại từ phần tử faultstring của phản hồi lỗi. Ví dụ: trong faultstring sau đây, tên PythonScript là myscript.py và lý do thất bại 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 được xác định ở bước 1 ở trên và xác minh xem có phép chia hoặc phép toán chia lấy dư nào 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 faultstring:

    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 là 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 phép toán modulo không phải là 0 trong PythonScript.

Để khắc phục vấn đề với PythonScript ví dụ nêu 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 phép toán modulo. Ví dụ:

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

Thông tin khác

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