Python dainganxanh
  • Lời nói đầu
  • Chương I. SƠ LƯỢC
    • Bài 1. Cài đặt môi trường
    • Bài 2. Từ khóa và định danh
    • Bài 3. Câu lệnh, khối lệnh và chú thích
    • Bài 4. Nhập, xuất dữ liệu
    • Bài 5. Toán tử và lệnh gán
    • Bài 6. Biến, Hằng
    • Bài 7. Kiểu dữ liệu
    • Bài 8. Thao tác với tệp (cơ bản)
    • Bài 9. Tổng quan về Python
    • Bài tập chương 1
  • Chương II. RẼ NHÁNH - LẶP
    • Bài 10. Cấu trúc rẽ nhánh if…else
    • Bài 11. Cấu trúc lặp với for
    • Bài 12. Cấu trúc lặp với while
    • Bài 13. Lệnh break và continue
    • Bài tập chương 2
  • Chương III. HÀM & MODULE
    • Bài 14. Hàm
    • Bài 15. Tham số hàm
    • Bài 16. Đệ quy
    • Bài 17. Hàm ẩn danh
    • Bài 18. Biến toàn cục và cục bộ
    • Bài 19. Module
    • Bài 20. Package
  • Chương IV. KIỂU DỮ LIỆU
    • Bài 21. Dữ liệu kiểu số
    • Bài 22. Dữ liệu kiểu string
    • Bài 23. Dữ liệu kiểu list
    • Bài 24. Dữ liệu kiểu tuple
    • Bài 25. Dữ liệu kiểu set
    • Bài 26. Dữ liệu kiểu dictionary
  • Chương V. TỆP & THƯ MỤC
    • Bài 27. Đọc và ghi file
    • Bài 28. Quản lý file và folder
  • Chương VI. LỖI & NGOẠI LỆ
    • Bài 29. Ngoại lệ
    • Bài 30. Xử lý ngoại lệ
    • Bài 31. Xây dựng ngoại lệ
  • Chương VII. HƯỚNG ĐỐI TƯỢNG
    • Bài 32. Lập trình hướng đối tượng
    • Bài 33. Đối tượng và Lớp
    • Bài 34. Kế thừa
    • Bài 35. Đa kế thừa
    • Bài 36. Nạp chồng toán tử
  • Chương VIII. NGÀY - GIỜ
    • Python datetime
    • Python strftime()
    • Python strptime()
    • Current date and time
    • Get Current time
    • Timestamp to datetime
    • Python time Module
    • Python sleep()
  • Chương IX. CHỦ ĐỀ NÂNG CAO
    • Python Iterators
    • Python Generators
    • Python Closures
    • Python Decorators
    • Python @property decorator
    • Python RegEx
    • Python Examples
  • PHỤ LỤC - GHI CHÉP
    • Hàm map()
    • Cài Sublime Text để code Python
    • Ghi chép - ghi chú
    • Mảng 2 chiều
    • Công thức với dãy số
  • Tài liệu tham khảo
  • www.dainganxanh.com
  • 🐍Khóa học Python
  • 🤷‍♀️Hỏi đáp, chia sẻ (FG)
  • 🎮Sinh Test chấm Themis
Powered by GitBook
On this page
  • Lỗi cú pháp
  • Lỗi logic (ngoại lệ - exceptions)
  • Ngoại lệ tích hợp sẵn (built-in exceptions)

Was this helpful?

  1. Chương VI. LỖI & NGOẠI LỆ

Bài 29. Ngoại lệ

Lỗi và ngoại lệ trong Python

Một chương trình python sẽ dừng lại ngay khi nó gặp lỗi nếu chưa được khắc phục. Những lỗi này có thể được phân thành 2 loại:

  • Lỗi cú pháp

  • Lỗi logic (Ngoại lệ)

Lỗi cú pháp

Lỗi do không tuân theo cấu trúc (cú pháp) của ngôn ngữ được gọi là lỗi cú pháp (syntax error) hoặc lỗi phân tích cú pháp (parsing error).

Ví dụ:

print(hello world!)

Khi chạy chương trình sẽ báo lỗi:

Traceback (most recent call last):
  File "C:\...\main.py", line 1
    print(hello world!)
                    ^
SyntaxError: invalid syntax

Chương trình phát sinh lỗi ở dòng 1, vị trí trong hàm print (xâu "hello world!" chưa có dấu nháy mở-đóng xâu)

Lỗi logic (ngoại lệ - exceptions)

Các lỗi xảy ra khi chạy chương trình (sau khi vượt qua kiểm tra cú pháp) được gọi là ngoại lệ (exceptions) hoặc lỗi lôgic (logical errors).

Ví dụ, lỗi sẽ phát sinh khi ta mở một file không tồn tại (FileNotFoundError),khi ta thực hiện phép chia cho 0 (ZeroDivisionError), khi ta import một module không tồn tại (ImportError),...

Bất cứ khi nào các loại lỗi logic (runtime error) xảy ra, Python sẽ phát sinh một đối tượng ngoại lệ. Nếu không được xử lý đúng cách, chương trình sẽ in thông báo lỗi cùng với một số chi tiết về lý do tại sao lỗi đó xảy ra.

Xem xét ví dụ sau:

a = 1 / 0

Chạy chương trình sẽ nhận được thông báo sau:

Traceback (most recent call last):
  File "C:\...\main.py", line 1, in <module>
    a = 1 / 0
ZeroDivisionError: division by zero

Ví dụ về lỗi mở file không tồn tại:

open("imaginary.txt")
Traceback (most recent call last):
 File "<string>", line 301, in runcode
 File "<interactive input>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'imaginary.txt'

Ngoại lệ tích hợp sẵn (built-in exceptions)

Hoạt động không hợp lệ sẽ sinh ngoại lệ. Có rất nhiều ngoại lệ tích hợp sẵn trong Python được gọi ra khi các lỗi tương ứng xảy ra. Ta có thể xem tất cả các ngoại lệ được tích hợp sẵn bằng cách sử dụng hàm local() được tích hợp sẵn như sau:

print(dir(locals()['__builtins__']))

Một số ngoại lệ tích hợp sẵn phổ biến trong Python cùng với lỗi gây ra chúng được liệt kê dưới đây:

Ngoại lệ

Lý do gây ra

AssertionError

Xảy ra khi câu lệnh assert thất bại.

AttributeError

Xảy ra khi gán thuộc tính hoặc tham chiếu thất bại.

EOFError

Xảy ra khi hàm input () chạm vào điều kiện end-of-file.

FloatingPointError

Xảy ra khi một số thực dấy phẩy động thực thi không thành công

GeneratorExit

Xảy ra khi phương thức close() của hàm generator được gọi.

ImportError

Xảy ra khi không tìm thấy module được import.

IndexError

Xảy ra khi một chỉ số trong chuỗi (sequence) nằm ngoài phạm vi.

KeyError

Xảy ra khi không tìm thấy khóa ánh xạ (từ điển) trong tập hợp các khóa hiện có.

KeyboardInterrupt

Xảy ra khi người dùng nhấn phím ngắt (thông thường là Ctrl-C hoặc Delete).

MemoryError

Xảy ra khi một operation hết bộ nhớ nhưng tình huống vẫn có thể được sửa chữa (bằng cách xóa một số đối tượng).

NameError

Xảy ra khi không tìm thấy tên cục bộ hoặc toàn cầu của biến.

NotImplementedError

Xảy ra bằng các phương thức trừu tượng khi chúng yêu cầu các lớp dẫn xuất ghi đè phương thức.

OSError

Xảy ra khi một hàm trả về lỗi liên quan đến hệ thống

OverflowError

Xảy ra khi kết quả của phép toán số học quá lớn không thể biểu diễn.

ReferenceError

Xảy ra khi một proxy tham chiếu yếu sử dụng để truy cập một thuộc tính của tham chiếu sau khi thu thập rác.

RuntimeError

Xảy ra khi phát hiện thấy lỗi không thuộc bất kỳ danh mục nào khác.

StopIteration

Xảy ra bằng phương thức next() của một vòng lặp để báo hiệu rằng không có giá trị nào được trả về bởi iterator.

SyntaxError

Xảy ra khi gặp lỗi cú pháp.

IndentationError

Xảy ra khi có lỗi thụt lề không chính xác.

TabError

Xảy ra khi thụt lề sử dụng các tab và dấu cách không nhất quán.

SystemError

Xảy ra khi trình thông dịch tìm thấy các lỗi nội bộ nhưng tình hình không quá nghiêm trọng.

SystemExit

Xảy ra bởi hàm sys.exit().

TypeError

Xảy ra khi một hàm hoặc phép thực thi (operation) áp dụng kiểu không chính xác cho một đối tượng.

UnboundLocalError

Xảy ra khi tham chiếu tạo thành một biến cục bộ trong một hàm hoặc phương thức, nhưng không có giá trị nào bị ràng buộc với biến đó.

UnicodeError

Xảy ra khi có lỗi liên quan đến Unicode

UnicodeEncodeError

Xảy ra khi lỗi liên quan đến Unicode diễn ra trong quá trình mã hóa.

UnicodeDecodeError

Xảy ra khi lỗi liên quan đến Unicode diễn ra trong quá trình giải mã.

UnicodeTranslateError

Xảy ra khi lỗi liên quan đến Unicode trong quá trình dịch.

ValueError

Xảy ra khi một phép toán hoặc hàm nhận được một đối số có kiểu đúng nhưng giá trị không phù hợp

ZeroDivisionError

Xảy ra khi đối số thứ hai của phép chia hoặc phép toán modulo bằng 0.

Chúng ta có thể xử lý các ngoại lệ bằng cách sử dụng câu lệnh try, except và finally (sẽ tìm hiểu trong bài học tiếp theo).

PreviousChương VI. LỖI & NGOẠI LỆNextBài 30. Xử lý ngoại lệ

Last updated 4 years ago

Was this helpful?