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 0Mỗ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 0ArgumentError: 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.
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→ZeroDivisionErrornil-method→NoMethodErrorbad-integer→ArgumentErrorwrong-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
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ý
1Tìm hiểu sâu về chuỗi
Tổng quan về phương thức chuỗiNội suy chuỗiDuyệt qua chuỗiTách và nối chuỗiÔn tập: Đan chuỗi4Khối lệnh, Proc và lambda
Khối lệnh là gì?do..end và dấu ngoặc nhọnTừ khóa yieldTham số của khối lệnhProc và lambdaÔn tập: bộ lặp tùy chỉnh7Hash, phần 2
Hash.new với giá trị mặc địnhLặp qua HashHash lồng nhauGộp và chuyển đổiÔn tập: Bộ đếm tần suất10Dự án: Hồ sơ học sinh
Tổng quan dự ánThêm học sinh2Phạm vi
Phạm vi là gì?Các phương thức của phạm viPhạm vi trong case / whenÔn tập: luyện tập với phạm vi5Sức mạnh của Enumerable
select và rejectNối chuỗi mapreduce / injectcount, all?, any?, none?group_by và partitionsort_by, min_by, max_byÔn tập: quy trình dữ liệuTự luyện tập: Trình biên dịch Ruby online