Bất cứ người nào học lập trình cũng đều sinh ra lỗi, tùy vào khả năng và kinh nghiệm của từng người mà gặp các lỗi khác nhau. Có 3 loại lỗi thường gặp là:
- Lỗi cú pháp(Syntax Error)
- Lỗi thực thi(Run-time Exception)
- Lỗi nghiệp vụ(Logic Error)
Python cũng giống như các ngôn ngữ khác là cho phép bắt lỗi bằng khối lệnh try…catch
1.Lỗi cú pháp(Syntax Error)
Lỗi thường gặp với nhưng Programmer mới bắt đầu học, viết đâu sai đó. Không thể thông dịch được phần mềm.

2.Lỗi thực thi (Run-time Exception)
Thường lỗi này thộng dịch hoàn tất nhưng trong quá trình thực thi lại phát sinh ra lỗi. Các lỗi thường gặp như chia cho 0, ép kiểu sai, đọc file lỗi,kết nối mạng lỗi…

3.Lỗi nghiệp vụ(Logic Errors)
Lỗi này rất nghiêm trọng, thông dịch và chạy ngon lành. Nhưng kết quả sai với yêu cầu của khác hàng.
Các lối này thường rất hiếm khi xảy ra nhưng khi xảy ra rồi thì rất khó tìm thấy và thấy rồi cũng thường khó fix bug.
4.Bắt lỗi
Python hỗ trợ try..catch để bắt lỗi Runtime, giúp báo rõ loại lỗi chương trình đang gặp và vẫn tiếp tục hoạt động khi gặp lỗi. Có rất nhiều trường hợp sử dụng. Sau đây trình bày một cách tổng quát nhất:
try:
x=5
y=0
z=x/y
print(z)
except Exception as ex:
# Phép chia này có vấn đề, chia cho 0.
# Một lỗi được phát ra tại đây (ZeroDivisionError).
print("Bị lỗi rồi!",str(ex))
print("Cảm ơn bạn đã dùng phần mềm")
C:\Users\TranVan\AppData\Local\Programs\Python\Python37\python.exe C:/Users/TranVan/PycharmProjects/HelloWord/TryCatch.py Bị lỗi rồi! division by zero Cảm ơn bạn đã dùng phần mềm Process finished with exit code 0
Đây là mô hình sơ đồ phân cấp của các ngoại lệ trong Python.
- Lớp ở mức cao nhất là BaseException
- Các lớp con trực tiếp là Exception và KeyboardInterrupt, ..
Các Exception sẵn có của Python thông thường được bắt nguồn (derived) từ BaseException (Mở rộng từ BaseException). Trong khi đó các exception của người dùng (lập trình viên) nên thừa kế từ lớp Exception hoặc từ các lớp con của nó.

