Menu
CoddyTech

Ngoại lệ là gì?

Thuộc phần Logic và luồng xử lý trong hành trình Ruby của Coddy. Bài học 43 trên 56.

Khi có lỗi xảy ra lúc chạy chương trình, chẳng hạn như chia cho 0, phân tích cú pháp "abc" thành số nguyên hoặc gọi phương thức trên nil, Ruby phát sinh ngoại lệ. Chương trình dừng lại, còn Ruby in ra điều gì đã xảy ra và lỗi xảy ra ở đâu.

10 / 0
# ZeroDivisionError: chia cho 0

Mỗi loại lỗi là một lớp riêng. Một số lỗi thường gặp:

  • ZeroDivisionError: chia một số nguyên cho 0
  • ArgumentError: truyền đối số không đúng cho một phương thức (Integer("abc"))
  • NoMethodError: gọi một phương thức mà đối tượng nhận không có (nil.upcase)
  • TypeError: thao tác trên sai loại đối tượng ("a" + 1)

Mỗi lớp ngoại lệ đều có .message: phần mô tả dễ đọc mà Ruby in ra khi chương trình không xử lý ngoại lệ. Các bài học tiếp theo sẽ hướng dẫn bạn cách bắt những ngoại lệ này để chương trình tiếp tục chạy.

challenge icon

Thử thách

Người mới

Đọc một dòng đầu vào, là tên của một biểu thức Ruby. In ra tên lớp ngoại lệ mà Ruby sẽ phát sinh cho biểu thức đó. Dùng câu lệnh case (không cần thực sự phát sinh ngoại lệ):

  • divide-by-zero → ZeroDivisionError
  • nil-method → NoMethodError
  • bad-integer → ArgumentError
  • wrong-type → TypeError
  • bất kỳ giá trị nào khác → Unknown

Với đầu vào nil-method, đầu ra là NoMethodError.

Tự làm thử

kind = gets.chomp

# TODO: dùng case với kind ... in ra tên lớp (class) ngoại lệ (exception) tương ứng
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng xử lý

Tự luyện tập: Trình biên dịch Ruby online