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

  • 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ả1

Ngoại lệ

Lớp cơ sở cho tất cả các trường hợp ngoại lệ

2

Dừ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

3

Thoát khỏi hệ thống

Được kích hoạt bởi hệ thống chức năng. lối ra[]

4

Chuẩ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

5

Số họcLỗi

Lớp cơ sở cho tất cả các lỗi xảy ra cho phép tính số

6

lỗ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

7

Lỗ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

8

ZeroDivisionLỗ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ố

9

Khẳ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

10

Lỗ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

11

EOFLỗ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

12

Nhập Lỗi

Đã kích hoạt được khi một câu lệnh nhập không thành công

13

Bà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

14

Tra cứuLỗi

Lớp cơ sở cho tất cả các lỗi tra cứu

15

Chỉ mụcLỗi

Được kích hoạt khi không tìm thấy mục trong một chuỗi

16

Lỗi chính

Được nâng cấp khi không tìm thấy khóa được chỉ định trong từ điển

17

Tê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

18

UnboundLocalError

Đượ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ó

19

Mô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

20

Lỗ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

21

Hệ đ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

22

Lỗi cú pháp

Được kích hoạt khi có lỗi trong cú pháp Python

23

Lỗi thụt đầu dòng

Được kích hoạt khi nhận diện không đúng cách

24

Lỗ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

25

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

26

Loạ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

27

Giá 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

28

Lỗ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

29

NotImplementedLỗ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 successfully
0

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 successfully
1

Ở đâ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 successfully
2

Kết quả

Written content in the file successfully
3

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 successfully
4

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 successfully
5

Ở 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

Chủ Đề