d. While End While
2.6.1 Phân loại lỗ
Trong VB.NET, chúng ta có thể gặp các loại lỗi sau:
Syntax error
Lỗi cú pháp, còn gọi là lỗi trong lúc thiết kế. Những lỗi này dễ chỉnh sửa vì VB.NET sẽ kiểm tra cú pháp khi ta đang nhập từ bàn phím nên sẽ báo lỗi tức thời khi ta gõ sai hoặc dùng một từ không thích hợp.
Run-time error
Lỗi thực thi xảy ra khi chương trình đang thực thi. Đây là những lỗi khó xác định hơn lỗi cú pháp. Lỗi thực thi có thể từ các lý do khác nhau như:
Mở một tập tin không tồn tại
Truy xuất một thư mục nhưng không có quyền trên đó Truy xuất dữ liệu một bảng không tồn tại trong CSDL Chia cho số 0
Nhập chuỗi cho nơi cần nhập số hoặc ngược lại, v.v…
Logic error
Lỗi luận lý cũng xảy ra khi chương trình đang thực thi và được thể hiện dưới những hình thức hay những kết quả không mong đợi. Loại lỗi này thường do sai lầm trong thuật giải.
2.6.2 Xử lý lỗi
Một lỗi xảy ra khi chương trình đang chạy gọi là một Exception. Trong CLR, Exception là một đối tượng từ lớp System.Exception. Chúng ta cần lưu ý một lỗi xảy ra trong lúc thực thi không làm treo chương trình, nhưng nếu không được xử lý sẽ làm treo chương trình. CLR chỉ ra tình trạng lỗi qua lệnh Throw. Lệnh này sẽ đưa ra một đối tượng kiểu System.Exception chứa thông tin về lỗi đang xảy ra.
VB.NET cung cấp một cơ chế xử lý lỗi hoàn chỉnh với cú pháp sau: Try
' các lệnh có khả năng gây lỗi Catch
' các lệnh xử lý khi lỗi xảy ra [Finally]
43 End Try
Cấu trúc này cho phép chúng ta thử (Try) thực hiện một khối lệnh xem có gây lỗi không; nếu có sẽ bẫy và xử lý (Catch) lỗi.
Cấu trúc này chia làm các khối sau: Khối Try:
Chứa các câu lệnh có khả năng gây lỗi Khối Catch:
Các dòng lệnh để bẫy và xử lý lỗi phát sinh trên khối Try. Khối này gồm một loạt các lệnh bắt đầu với từ khóa Catch, biến kiểu Exception ứng với một kiểu Exception muốn bẫy và các lệnh xử lý. Dĩ nhiên, chúng ta có thể dùng một lệnh Catch cho các System.Exception, nhưng như thế sẽ không cung cấp thông tin đầy đủ cho người dùng về lỗi đang xảy ra cũng như hướng dẫn cách xử lý cụ thể cho mỗi tình huống. Ngoài những lỗi đã xử lý, có thể xảy ra những lỗi ngoài dự kiến, để xử lý các lỗi này, chúng ta nên đưa thêm một lệnh Catch để bẫy tất cả các trường hợp còn lại và xuất thông tin về lỗi xảy ra.
Khối Finally:
Khối tùy chọn, sau khi chạy qua các khối Try và Catch nếu không có chỉ định nào khác, khối Finally sẽ được thực hiện bất kể có xảy ra lỗi hay không.
Cuối cùng, cấu trúc bẫy và xử lý lỗi chấm dứt với từ khóa End Try. Cú pháp chung cho một cấu trúc xử lý lỗi như sau
Try
' khối lệnh có thể gây lỗi
Catch <biến1> As <Kiểu Exception> [When <biểu thức>] ' khối lệnh bẫy và xử lý lỗi
Catch <biến2> As <Kiểu Exception> [When <biểu thức>] ' khối lệnh bẫy và xử lý lỗi
Finally
' khối lệnh kết thúc End Try
Ví dụ:
Dim d as Double, i as Integer Try
i = CInt(InputBox("Xin nhập một số nguyên")) d = 42 \ i
Catch ex As DivideByZeroException
Messagebox.Show("Không thể chia cho số không") Catch ex As InvalidCastException
44 Messagebox.Show("Xin nhập số nguyên !")
End Try
Câu lệnh Catch có thể có nhiều cách sử dụng: