Ngoại lệ lỗi thời gian chạy python

Chúng ta chắc chắn sẽ gặp những lỗi khi lập trình cũng như khi chạy chương trình. Trong Python, chúng ta có thể chia các lỗi [error] thành 2 loại. lỗi cú pháp và ngoại lệ

1. Lỗi cú pháp [Syntax Error] trong Python

Syntax error [syntax error] but call is parsing error. Lỗi này xảy ra là do chúng ta không quản lý cú pháp của Python khi thiết lập chương trình. Lỗi cú pháp thường xảy ra khi chúng ta mới bắt đầu học Python nên chưa hiểu rõ về cú pháp của Python

Ví dụ lỗi cú pháp trong Python

# SyntaxError: expected ':'
if a < 3
  print["a is smaller than 3"]

Trong ví dụ trên, câu lệnh if thiếu dấu. nên gây ra lỗi cú pháp

# SyntaxError: invalid syntax
while True:
  print[Hello world]

Trong ví dụ trên, đối số của hàm print không được đặt trong dấu nháy nên gây ra lỗi cú pháp

2. Lỗi ngoại lệ [Exception] trong Python

Những lỗi xảy ra khi chạy chương trình [thời gian chạy] được gọi là ngoại lệ hoặc lỗi logic. Có nhiều trường hợp có thể gây ra ngoại lệ. Ví dụ, khi chúng ta mở một tập tin không tồn tại sẽ gặp ngoại lệ là FileNotFoundError. Hay chia một số cho 0 thì sẽ gặp ngoại lệ là ZeroDivisionError. Hoặc nếu import một mô-đun không tồn tại thì sẽ gặp ngoại lệ là ImportError

Khi xảy ra ngoại lệ, Python sẽ tạo ra một đối tượng exception. Nếu những ngoại lệ này không được xử lý thì Python sẽ dừng chương trình và đưa ra các thông báo lỗi

# ZeroDivisionError: division by zero
x = 1/0
# NameError: name 'spam' is not defined
y = 4 + spam*3
# TypeError: can only concatenate str [not "int"] to str
z = '2' + 2
# FileNotFoundError: [Errno 2] No such file or directory: 'imaginary.txt'
open["imaginary.txt"]

3. Những ngoại lệ này được xây dựng sẵn trong Python

Có nhiều ngoại lệ được xây dựng sẵn trong Python để bắt các ngoại lệ. Chúng ta có thể sử dụng câu lệnh

# SyntaxError: invalid syntax
while True:
  print[Hello world]
0 để xem các ngoại lệ được xây dựng sẵn trong Python

Bảng bên dưới là danh sách một số thông tin ngoại lệ được xây dựng sẵn trong Python

ExceptionNguyên nhân gây ra ngoại lệAssertionErrorTrả về ngoại lệ khi biểu thức so sánh của câu lệnh khẳng định kết quả là FalseFloatingPointErrorXảy ra lỗi khi thao tác trên các giá trị thực gặp lỗiImportErrorXảy ra khi nhập một mô-đun mà Python không tìm thấy IndexErrorXảy ra khi truy xuất một phần

Trong bài viết Cách xử lý ngoại lệ [Exception] trong Python, chúng ta sẽ tìm hiểu cách xử lý các ngoại lệ trong Python

Khi xảy ra lỗi trong một phương thức, phương thức đó sẽ tạo một đối tượng và chuyển giao nó cho hệ thống thời gian chạy. Đối tượng, được gọi là đối tượng ngoại lệ, chứa thông tin về lỗi, bao gồm loại lỗi và trạng thái của chương trình khi xảy ra lỗi. Tạo một đối tượng ngoại lệ và đưa nó vào hệ thống thời gian chạy được gọi là ném ngoại lệ

Sau khi một phương thức đưa ra một ngoại lệ, hệ thống thời gian chạy sẽ cố gắng tìm thứ gì đó để xử lý nó. Tập hợp các "thứ" có thể xử lý ngoại lệ là danh sách các phương thức được sắp xếp theo thứ tự đã được gọi để truy cập phương thức xảy ra lỗi. Danh sách các phương thức được gọi là ngăn xếp cuộc gọi [xem hình tiếp theo]

ngăn xếp cuộc gọi

Hệ thống thời gian chạy tìm kiếm ngăn xếp cuộc gọi cho một phương thức chứa một khối mã có thể xử lý ngoại lệ. Khối mã này được gọi là trình xử lý ngoại lệ. Quá trình tìm kiếm bắt đầu với phương thức xảy ra lỗi và tiến hành thông qua ngăn xếp cuộc gọi theo thứ tự ngược lại với các phương thức được gọi. Khi tìm thấy một trình xử lý thích hợp, hệ thống thời gian chạy sẽ chuyển ngoại lệ cho trình xử lý. Trình xử lý ngoại lệ được coi là phù hợp nếu loại đối tượng ngoại lệ được ném khớp với loại mà trình xử lý có thể xử lý

Trình xử lý ngoại lệ được chọn được gọi là bắt ngoại lệ. Nếu hệ thống thời gian chạy tìm kiếm tất cả các phương thức trên ngăn xếp cuộc gọi mà không tìm thấy trình xử lý ngoại lệ thích hợp, như thể hiện trong hình tiếp theo, thì hệ thống thời gian chạy [và do đó, chương trình] sẽ kết thúc

Tìm kiếm ngăn xếp cuộc gọi cho trình xử lý ngoại lệ

Sử dụng ngoại lệ để quản lý lỗi có một số lợi thế so với kỹ thuật quản lý lỗi truyền thống. Bạn có thể tìm hiểu thêm trong phần Ưu điểm của ngoại lệ

Chủ Đề