
Bắt và phân loại lỗi NXException: lấy ErrorCode, Message và ghi nhận
#Python#Lỗi1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Khi NX từ chối một thao tác, nó ném NXException chứa mã lỗi và thông báo. Biết cách đọc hai thông tin này giúp bạn quyết định tiếp tục, thử lại hay dừng.
Bắt và phân loại lỗi NXExceptionCác bước thực hiện
- Dùng try/except đúng chỗ. Bọc từng thao tác nhỏ, không bọc cả script.
- Đọc ErrorCode. ex.ErrorCode là số; tra trong tài liệu NX Open để hiểu nguyên nhân.
- Đọc Message. ex.Message là câu mô tả, ghi vào log.
- Phân biệt lỗi. Lỗi dữ liệu (bỏ qua file) khác lỗi hệ thống (dừng hẳn).
- Tiếp tục vòng lặp. Ghi lỗi rồi chuyển sang đối tượng kế tiếp.
Code tham khảo (Python)
import NXOpen def thu_thao_tac(ten, ham, lw): """Chạy ham(); trả về (thanh_cong, thong_bao).""" try: ham() return True, "" except NXOpen.NXException as ex: thong_bao = "%s: NXException mã %d - %s" % (ten, ex.ErrorCode, ex.Message) except Exception as ex: # lỗi Python thông thường thong_bao = "%s: lỗi Python - %s" % (ten, ex) lw.WriteLine(thong_bao) return False, thong_bao def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() part = session.Parts.Work ket_qua = [] ket_qua.append(thu_thao_tac("Tạo điểm", lambda: part.Points.CreatePoint(NXOpen.Point3d(1, 2, 3)), lw)) ket_qua.append(thu_thao_tac("Mở file sai", lambda: session.Parts.OpenDisplay("X:/khong_co.prt"), lw)) ok = sum(1 for k in ket_qua if k[0]) lw.WriteLine("Hoàn tất: %d/%d thao tác thành công" % (ok, len(ket_qua))) if __name__ == "__main__": main()Giải thích code
- Thứ tự
exceptquan trọng: bắtNXExceptiontrước,Exceptionchung sau. - Hàm
thu_thao_tacgiúp mọi bước có cùng cách báo lỗi, dễ gom vào báo cáo. ex.ErrorCodelà số nguyên; thông báoex.Messagethường đủ để biết lý do.
Lỗi thường gặp
- Bắt
Exceptionrồi im lặng (pass) làm mất dấu vết lỗi; luôn ghi log. - Một số lỗi NX chỉ hiện dưới dạng cảnh báo trong Information Window mà không ném ngoại lệ; kiểm tra kết quả tạo ra có hợp lệ không.
Code mang tính tham khảo, viết cho NX 12 trở lên (Python journal). Tên menu và một số lớp có thể khác theo phiên bản NX; hãy chạy thử trên bản sao của chi tiết trước khi dùng cho dữ liệu thật.
Điểm: 0
Trả lời
Đăng nhập để tham gia thảo luận.