Nâng cao ngoại lệ trong Python
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 Show
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 Dưới đây là một số điểm quan trọng về cú pháp trên
Ví dụ 1Ví 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ụ 2Ví 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 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 Mệnh đề thử-cuối cùngKhố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ử. 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ỗiMộ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 offBạ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ápWritten 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 dedefinePython 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 |