Bạn không cần phải thử, nắm bắt và rút lại ngoại lệ trừ khi bạn có một số lý do cụ thể để bắt chúng ngay từ đầu. Nếu không, họ sẽ tự động phát ra từ các chức năng cấp thấp hơn, đưa chúng đến hàm mức cao nhất trong mã của bạn. Về cơ bản, bạn có thể nghĩ về chúng như là "được phục hồi" tất cả các con đường lên, mặc dù đây không phải là kỹ thuật những gì đang xảy ra.
Thực tế, hầu hết thời gian bạn thấy khối try
/catch
được viết, không chính xác. Bạn không nên bắt ngoại lệ trừ khi bạn thực sự có thể xử lý chúng. Nó hoàn toàn vô nghĩa (và thực tế được coi là thực hành không tốt) để bắt ngoại lệ chỉ để phục hồi chúng. Không quấn tất cả mã của bạn trong các khối try
.
Lưu ý rằng bằng cách "xử lý", tôi có nghĩa là mã của bạn trong khối catch
sẽ thực hiện một số hành động cụ thể dựa trên ngoại lệ cụ thể được ném tới số chính xác điều kiện đặc biệt.
Ví dụ: đối với số FileNotFoundException
, bạn có thể thông báo cho người dùng rằng không thể tìm thấy tệp và yêu cầu họ chọn một tệp khác.
Xem my answer here để biết thêm chi tiết và thảo luận kỹ lưỡng về "các phương pháp hay nhất về xử lý ngoại lệ".
Nguồn
2011-07-09 09:48:41
+1: súc tích và chính xác. Tôi muốn thêm một lý do nữa không chính xác là 'rethrowing' - bọc một ngoại lệ bên trong một ngoại lệ khác (nhưng luôn giữ nguyên ngoại lệ ban đầu trong InnerException, nếu không bạn sẽ mất thông tin về ngoại lệ ban đầu có thể hỗ trợ gỡ lỗi). Gói có thể cung cấp ngữ cảnh bổ sung mà không thể thực hiện lại, ví dụ: "Không thể lưu một đơn đặt hàng mới cho Khách hàng 843, xem InnerException để biết chi tiết.". –