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 về 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ể gửi một số loại lỗi ScriptEvaluationFailed. 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 Tên.

Nội dung phản hồi về 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 khi gặp 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 đã xác định ở bước 1 ở trên và xác minh xem biến không xác định được xác định trong 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 biến không xác định num3, khớp với chuỗi lỗi:

    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 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 được xác định đúng cách.

Để khắc phục vấn đề với ví dụ về PythonScript ở trên, hãy xác định biến num3 trước khi sử dụng. 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 phát sinh khi đối số thứ hai của một phép chia hoặc phép toán mô-đun bằng 0.

Nội dung phản hồi về 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 khi gặp 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 khiến phần tử chuỗi lỗi của phản hồi lỗi không thực hiện được. 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 phép toán 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 mẫu ở 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 lấy dư không bằng 0 trong PythonScript.

Để khắc phục vấn đề với ví dụ về PythonScript nêu trên, hãy sử dụng giá trị khác 0 làm đối số thứ hai của phép chia hoặc phép chia mô-đun. 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ó nhiều nguyên nhân có thể xảy ra khác 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.