03/12/2018, 21:58

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ể ...

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
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. 

Để 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 Quantrimang hướng dẫn trong các bài viết tiếp theo. Các bạn cùng theo dõi nhé.

0