Chúng không giống nhau.
Một lỗi là hành vi ngoài ý muốn của một phần mềm: phần mềm không làm những gì nó phải làm. Lỗi có thể sống ở tất cả các cấp độ phát triển phần mềm, từ lỗi chính tả cũ cho đến lỗi logic cho đến thông số chức năng không đầy đủ.
Ngược lại, một ngoại lệ có thể đề cập đến một điều kiện bất thường của chương trình, lệch khỏi hoạt động bình thường hoặc cụ thể hơn là cấu trúc ngôn ngữ được sử dụng để báo hiệu và xử lý các điều kiện đó.
Thực tế là một ngoại lệ xảy ra có thể là dấu hiệu của một lỗi, nhưng thường thì không. Ví dụ: một ứng dụng được cho là tải xuống một tài liệu từ một URL và xử lý nó cục bộ có thể tạo ra một ngoại lệ khi máy chủ từ xa không hoạt động: ứng dụng bị lệch khỏi hoạt động bình thường (nó không thể tải xuống và xử lý tài liệu), nhưng nếu nó xử lý ngoại lệ đúng cách và phục hồi, sau đó không có lỗi.
Ngược lại, sự hiện diện của một lỗi không nhất thiết phải biểu hiện như một ngoại lệ. Một ứng dụng có thể âm thầm loại bỏ dữ liệu bạn nhập thay vì lưu trữ nó trong cơ sở dữ liệu của nó; không có ngoại lệ bị ném, nhưng nó vẫn là một lỗi.