Python cung cấp hai tính năng rất quan trọng để xử lý bất kỳ lỗi nào không mong muốn trong các chương trình Python và bổ sung khả năng khắc phục lỗi trong chúng
- Xử lý ngoại lệ. Điều này sẽ được đề cập trong bài viết này, bao gồm một danh sách các Ngoại lệ [Ngoại lệ] tiêu chuẩn có sẵn trong Python.
- Quả quyết. Điều này đã được đề cập trong bài viết tiếp theo Khẳng định trong Python
Danh sách các trường hợp ngoại lệ tiêu chuẩn
STTTên ngoại lệ & Mô tả1Ngoại lệ
Lớp cơ sở cho tất cả các trường hợp ngoại lệ
2Dừng lặp lại
Được kích hoạt khi phương thức next[] của một chu trình không trỏ đến bất kỳ đối tượng nào
3Thoát khỏi hệ thống
Được kích hoạt bởi hệ thống chức năng. lối ra[]
4ChuẩnLỗi
Lớp cơ sở cho tất cả các ngoại lệ được ưu tiên cho các ngoại lệ ngoại trừ StopIteration và SystemExit
5Số họcLỗi
Lớp cơ sở cho tất cả các lỗi xảy ra cho phép tính số
6lỗi tràn
Được nâng cấp khi một tính năng được phép vượt quá giới hạn tối đa cho một số loại
7Lỗi dấu phẩy động
Kích hoạt được khi một lỗi tính năng được phép không thành công
8ZeroDivisionLỗi
Được kích hoạt khi cho phép chia hoặc mô-đun [chia dư] cho 0 diễn ra đối với tất cả các kiểu số
9Khẳng địnhLỗi
Được kích hoạt trong trường hợp lệnh khẳng định không thực hiện thành công
10Lỗi thuộc tính
Kích hoạt được trong trường hợp tham chiếu hoặc gán thuộc tính không thành công
11EOFLỗi
Được kích hoạt khi không có đầu vào từ hàm raw_input[] hoặc input[] và đến cuối tệp
12Nhập Lỗi
Đã kích hoạt được khi một câu lệnh nhập không thành công
13Bàn PhímNgắt
Được kích hoạt khi người dùng làm gián đoạn công việc thực thi chương trình, thường bằng cách nhấn Ctrl + C
14Tra cứuLỗi
Lớp cơ sở cho tất cả các lỗi tra cứu
15Chỉ mụcLỗi
Được kích hoạt khi không tìm thấy mục trong một chuỗi
16Lỗi chính
Được nâng cấp khi không tìm thấy khóa được chỉ định trong từ điển
17TênLỗi
Được kích hoạt khi không tìm thấy mã định danh trong không gian tên cục bộ hoặc toàn cầu
18UnboundLocalError
Được kích hoạt khi cố gắng truy cập 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 được gán cho nó
19Môi trườngLỗi
Lớp cơ sở cho tất cả các ngoại lệ xảy ra bên ngoài môi trường Python
20Lỗi IO
Được kích hoạt khi thao tác nhập / xuất không thành công, chẳng hạn như câu lệnh trong hoặc hàm open [] khi cố gắng mở một tệp không tồn tại
21Hệ điều hànhLỗi
Được kích hoạt khi xây dựng các lỗi liên quan đến hệ thống điều hành
22Lỗi cú pháp
Được kích hoạt khi có lỗi trong cú pháp Python
23Lỗi thụt đầu dòng
Được kích hoạt khi nhận diện không đúng cách
24Lỗi hệ thống
Được kích hoạt khi trình thông dịch tìm thấy sự cố nội bộ, nhưng khi gặp lỗi này, trình dịch Python không thoát
Thoát khỏi hệ thống
Được kích hoạt khi trình thông dịch Python bị thoát bằng cách sử dụng hàm sys. lối ra[]. Nếu không được xử lý trong mã lệnh, thông dịch trình sẽ thoát
26LoạiLỗi
Được kích hoạt khi một hoạt động hoặc chức năng được thực hiện không hợp lệ đối với kiểu dữ liệu được chỉ định
27Giá trịError
Được kích hoạt khi chức năng dựng sẵn cho một kiểu dữ liệu có kiểu đối số hợp lệ, nhưng các đối số có giá trị không hợp lệ được chỉ định
28Lỗi runtime
Được kích hoạt khi lỗi được tạo ra không thuộc bất kỳ loại nào
29NotImplementedLỗi
Được kích hoạt khi một phương thức hiển thị cần được khai thác trong một lớp kế thừa không thực sự được khai thác
Ngoại lệ [Exception] là gì?
Ngoại lệ là một sự kiện, xảy ra trong quá trình thực thi chương trình làm gián đoạn luồng hướng dẫn bình thường của chương trình. Nói chung, khi một tập lệnh Python gặp sự cố mà nó không thể đối phó, nó sẽ tạo ra một ngoại lệ. Một ngoại lệ là một đối tượng Python đại diện cho một lỗi
Khi một lệnh Python được tạo ra một ngoại lệ, nó phải xử lý ngoại lệ đó ngay lập tức nếu không nó sẽ kết thúc và thoát
Xử lý một ngoại lệ
Nếu bạn có một số lệnh đáng ngờ có thể tạo ra một ngoại lệ, bạn có thể bảo vệ chương trình của mình bằng cách nào đó . Sau khối try. , hãy bao gồm một câu lệnh ngoại trừ. , theo sau là một khối mã xử lý vấn đề theo cách tinh tế nhất có thể.
cú pháp
Đây là cú pháp đơn giản của khối thử. ngoại trừ. khác
cố gắng
Đặt đoạn mã đáng ngờ tại đây;
ngoại trừ ExceptionI
Nếu phát sinh ngoại lệ ExceptionI thì khối lệnh tại đây được thực thi
ngoại trừ ExceptionII
Nếu phát sinh ngoại lệ ExceptionII, thì khối lệnh tại đây được thực thi
khác
Nếu không có ngoại lệ nào phát sinh thì thực thi khối lệnh tại đây
Dưới đây là một số điểm quan trọng về cú pháp trên
- Một câu lệnh try duy nhất có thể có nhiều câu lệnh ngoại trừ. Điều này hữu ích khi khối thử bao gồm các câu lệnh có thể loại bỏ các loại ngoại lệ khác nhau
- Bạn cũng có thể cung cấp mệnh đề ngoại trừ chung để xử lý bất kỳ ngoại lệ nào
- Sau [các] mệnh đề ngoại trừ, bạn có thể thêm một mệnh đề khác. Block command at else sẽ được thực thi nếu mã trong khối try không phát sinh ngoại lệ
- Block command at other is block command không cần bảo vệ của khối try
Ví dụ 1
Ví dụ sau khi mở tệp, ghi nội dung vào tập tin và ra kết quả vì không gặp phải vấn đề gì
try: fh = open["testfile", "w"] fh.write["This is my test file for exception handling!!"] except IOError: print["Error: can\'t find file or read data"] else: print["Written content in the file successfully"] fh.close[]
Kết quả
Written content in the file successfully
Ví dụ 2
Ví dụ sau khi cố gắng mở một tệp mà bạn không có quyền ghi, vì vậy nó tạo ra một ngoại lệ
try: fh = open["testfile", "r"] fh.write["This is my test file for exception handling!!"] except IOError: print["Error: can\'t find file or read data"] else: print["Written content in the file successfully"]
Kết quả
Error: can't find file or read data
Mệnh đề ngoại trừ không có ngoại lệ
Bạn cũng có thể sử dụng câu lệnh ngoại trừ không có phần bắt ngoại lệ theo cú pháp sau
cố gắng
Đặt khối lệnh nghi ngờ phát sinh ngoại lệ tại đây;
ngoại trừ
Nếu có bất kỳ ngoại lệ nào thì khối lệnh tại đây sẽ được kích hoạt;
khác
Nếu không có bất kỳ ngoại lệ nào thì khối lệnh tại đây sẽ được kích hoạt;
Loại câu lệnh try-ngoại trừ trên có thể bắt tất cả các ngoại lệ ra. Mặc dù vậy, việc sử dụng này không được coi là một phương pháp lập trình tốt vì nó bắt được tất cả các trường hợp ngoại lệ nhưng không làm cho thành viên lập trình xác định được nguyên nhân gốc của vấn đề có thể xảy ra
Mệnh đề ngoại trừ với nhiều ngoại lệ
Bạn cũng có thể sử dụng cùng một câu lệnh ngoại trừ để xử lý nhiều ngoại lệ như cú pháp sau
cố gắng
Đặt khối lệnh nghi ngờ phát sinh ngoại lệ tại đây;
ngoại trừ [Ngoại lệ1, Ngoại lệ2,. , Ngoại lệ]
If have any exception any exception in the exception list at on
thì khối lệnh tại đây sẽ được kích hoạt;
khác
Nếu không có bất kỳ ngoại lệ nào thì khối lệnh tại đây sẽ được kích hoạt;
Mệnh đề thử-cuối cùng
Khối cuối cùng là nơi đặt lệnh khối phải phải thực thi, cho dù khối thử có đưa ra ngoại lệ hay không. Cú pháp của câu lệnh try-finally là.
thử.
Khối lệnh thực thi được đặt tại đây;
cuối cùng.
Khối lệnh đặt tại đây luôn được thực thi;
Lưu ý là bạn không được sử dụng mệnh đề khác với mệnh đề cuối cùng.
Ví dụ
try: fh = open["testfile", "w"] fh.write["Thử nghiệm try-finally!!"] finally: print["Lỗi: Không tìm thấy file hay đọc file"]
Nếu bạn không có quyền mở tệp ở chế độ ghi, thì điều này sẽ tạo ra kết quả sau
Lỗi: Không tìm thấy file hay đọc file
Ví dụ tương tự có thể được xác định rõ ràng hơn như sau
try: print["Tiến hành mở file để ghi..."] fh = open["testfile", "w"] try: fh.write["Thu nghiem try-finally!!"] print["Đã ghi xong."] finally: print["Tiến hành đóng file..."] fh.close[] print["Đã đóng file."] except IOError: print["Có lỗi: Không thể mở file hoặc ghi file!"]
Kết quả
Tiến hành mở file để ghi... Đã ghi xong. Tiến hành đóng file... Đã đóng file.
Khi một ngoại lệ phát sinh trong khối thử, thì công việc thực thi ngay lập tức được chuyển đến khối cuối cùng. Sau khi tất cả các câu lệnh trong khối cuối cùng được thực thi, ngoại lệ sẽ được đưa ra một lần nữa và được xử lý trong các câu lệnh của phần ngoại trừ nếu có ở lớp cao hơn tiếp theo của câu lệnh thử-ngoại trừ
Đối tượng của lỗi
Một ngoại lệ có thể có đối số, là giá trị cung cấp thông tin bổ sung về vấn đề [lỗi] xảy ra. Nội dung của các đối số khác nhau tùy theo ngoại lệ. Ta có thể bắt lại đối số của một ngoại lệ bằng cách cung cấp một biến số trong mệnh đề ngoại trừ như sau
________số 8_______Nếu bạn viết mã để xử lý một ngoại lệ duy nhất, bạn có thể có một biến theo tên của ngoại lệ trong câu lệnh ngoại trừ. Nếu bạn đang vượt qua nhiều ngoại lệ, bạn có thể có một biến theo sau ngoại lệ
Biến này nhận giá trị của ngoại lệ chủ yếu chứa nguyên nhân của ngoại lệ. Biến có thể nhận một giá trị duy nhất hoặc nhiều giá trị dưới dạng một bộ giá trị. Tuple này thường chứa chuỗi lỗi, số lỗi và vị trí lỗi
Ví dụ
Sau đây là một ví dụ cho một ngoại lệ duy nhất
# Định nghĩa một hàm def temp_convert[var]: try: return int[var] except ValueError as Argument: print["Đối số không phải chuỗi chứa số\n", Argument] # Gọi hàm temp_convert["xyz"]
Kết quả
Written content in the file successfully0
Offault off off
Bạn có thể nêu ra các ngoại lệ theo một số cách bằng cách sử dụng câu lệnh nâng cao . Cú pháp chung cho câu lệnh nâng cao như sau.
cú pháp
Written content in the file successfully1
Ở đây, Exception là loại ngoại lệ [ví dụ. NameError] và đối số args là giá trị cho đối số ngoại lệ. Đối số là tùy chọn;
Đối số truy xuất nguồn gốc cũng là tùy chọn [và hiện tại khi được sử dụng trong thực tế] và nếu có, là đối tượng theo dõi được sử dụng cho ngoại lệ
Ví dụ
Một ngoại lệ có thể là một chuỗi, một lớp hoặc một đối tượng. Hầu hết các ngoại lệ mà lõi Python nêu ra là các lớp, với một đối số là một thể hiện của lớp. Việc xác định các ngoại lệ mới khá dễ dàng và có thể được thực hiện như sau
Written content in the file successfully2
Kết quả
Written content in the file successfully3
Lưu ý. Để bắt một ngoại lệ, mệnh đề ngoại trừ phải tham chiếu đến cùng một ngoại lệ được đưa ra đối tượng lớp hoặc chuỗi đơn giản. Ví dụ, để bắt ngoại lệ ở trên, chúng ta phải viết mệnh đề ngoại trừ như sau
Written content in the file successfully4
Exception do user dedefine
Python cũng cho phép bạn tạo các ngoại lệ của riêng mình bằng cách dẫn xuất các lớp từ các ngoại lệ được tích hợp sẵn theo tiêu chuẩn
Dưới đây là một ví dụ liên quan đến RuntimeError. Tại đây, một lớp được tạo ra có tên Networkerror và được dẫn xuất từ RuntimeError. Điều này rất hữu ích khi bạn cần hiển thị thông tin cụ thể hơn khi bắt là một ngoại lệ
Trong thử khối, ngoại lệ do người dùng định nghĩa được kích hoạt và bị bắt bởi khối ngoại trừ. Biến e được sử dụng để tạo ra một thể hiện của Lỗi mạng lớp
Written content in the file successfully5
Ở trên bạn định nghĩa 1 lớp có tên Networkerror dẫn đầu ra từ lớp RuntimeError. Lúc này thì ta có thể kích hoạt nó như sau