Error và Exception trong Python

Python thường sinh ra các ngoại lệ (exception) khi có lỗi xảy ra trong quá trình thực thi. Quantrimang sẽ cùng bạn tìm hiểu về các ngoại lệ khác nhau được xây dựng trong ngôn ngữ này. Mời bạn đọc theo dõi.

Lỗi (Error)

Khi viết một chương trình, việc gặp lỗi thường xuyên là điều không thể tránh khỏi.

Có một số lỗi do không tuân theo cấu trúc đúng của cú pháp gây nên các lỗi lỗi cú pháp (syntax error hoặc parsing error).

>>> if a < 3
File "<interactive input>", line 1
if a < 3
^
SyntaxError: invalid syntax

Lệnh được viết trên bị thiếu dấu hai chấm trong câu lệnh IF lập tức chương trình báo lỗi cú pháp invalid syntax.

Ngoại lệ (Exception)

Ngoài ra, có trường hợp Python phát sinh lỗi khi đang thực thi chương trình (runtime error). Những lỗi này được gọi là ngoại lệ (Exception).

Ngoại lệ được Python tạo ra để xử lý vấn đề đó tránh cho chương trình bị hỏng.

Một số ví dụ về Exception như:

  • Mở một tệp không tồn tại (FileNotFoundError)
  • Chia một số cho 0 (ZeroDivisionError)
  • Không tìm thấy module được import (ImportError).
  • Truyền giá trị vào một function với đúng kiểu dữ liệu nhưng giá trị không thích hợp (ValueError).

Bất cứ khi nào có runtime error xảy ra, Python sẽ tạo một đối tượng ngoại lệ.

Nếu không được xử lý đúng cách, chương trình sẽ in ra lỗi và chi tiết về lý do có lỗi xảy ra.

>>> 1 / 0
Traceback (most recent call last):
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
ZeroDivisionError: division by zero

>>> 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ệ được Python tạo ra

Có rất nhiều ngoại lệ được Python tạo ra khi gặp các lỗi tương ứng.

Bạn có thể xem tất cả các trường hợp Exception có sẵn bằng cách sử dụng hàm local() như sau:

locals()['__builtins__']

Hàm này sẽ trả về một danh sách các ngoại lệ, chức năng và thuộc tính được Python tích hợp sẵn.

Quantrimang xin giới thiệu một số ngoại lệ được xây dựng sẵn trong Python cùng với lỗi gây ra nó trong bảng dưới đây:

Ngoại lệLý do gây ra
AssertionErrorXảy ra khi câu lệnh assert thất bại.
AttributeErrorXảy ra khi gán thuộc tính hoặc tham chiếu thất bại.
EOFErrorXảy ra khi hàm input () chạm vào điều kiện end-of-file.
FloatingPointErrorXảy ra khi một số thực dấy phẩy động thực thi không thành công
GeneratorExitXảy ra khi phương thức close() của hàm generator được gọi.
ImportErrorXảy ra khi không tìm thấy module được import.
IndexErrorXảy ra khi một chỉ số trong chuỗi (sequence) nằm ngoài phạm vi.
KeyErrorXả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ó.
KeyboardInterruptXảy ra khi người dùng nhấn phím ngắt (thông thường là Ctrl-C hoặc Delete).
MemoryErrorXả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).
NameErrorXảy ra khi không tìm thấy tên cục bộ hoặc toàn cầu của biến.
NotImplementedErrorXả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.
OSErrorXảy ra khi một hàm trả về lỗi liên quan đến hệ thống
OverflowErrorXả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.
ReferenceErrorXả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.
RuntimeErrorXả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.
StopIterationXả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.
SyntaxErrorXảy ra khi gặp lỗi cú pháp.
IndentationErrorXảy ra khi có lỗi thụt lề không chính xác.
TabErrorXảy ra khi thụt lề sử dụng các tab và dấu cách không nhất quán.
SystemErrorXả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.
SystemExitXảy ra bởi hàm sys.exit().
TypeErrorXả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.
UnboundLocalErrorXả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 đó.
UnicodeErrorXảy ra khi có lỗi liên quan đến Unicode
UnicodeEncodeErrorXảy ra khi lỗi liên quan đến Unicode diễn ra trong quá trình mã hóa.
UnicodeDecodeErrorXảy ra khi lỗi liên quan đến Unicode diễn ra trong quá trình giải mã.
UnicodeTranslateErrorXảy ra khi lỗi liên quan đến Unicode trong quá trình dịch.
ValueErrorXả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
ZeroDivisionErrorXảy ra khi đối số thứ hai của phép chia hoặc phép toán modulo bằng 0.

Để xử lý những ngoại lệ này, bạn có thể sử dụng các câu lệnh try, except và finally.

Ngoài ra, bạn cũng có thể tự định nghĩa ngoại lệ của mình trong Python nếu cần thiết.

Hai vấn đề này sẽ được chúng ta tìm hiểu trong các bài viết tiếp theo.

Leave a Reply