Python cung cấp hai tính năng rất quan trọng để xử lý mọi lỗi bất ngờ trong các chương trình Python của bạn và để thêm khả năng gỡ lỗi vào chúng -
Xử lý ngoại lệ - Điều này sẽ được đề cập trong hướng dẫn này. Dưới đây là danh sách các ngoại lệ tiêu chuẩn có sẵn trong Python: ngoại lệ tiêu chuẩn. − This would be covered in this tutorial. Here is a list standard Exceptions available in Python: Standard Exceptions.
Các xác nhận - điều này sẽ được đề cập trong các xác nhận trong hướng dẫn Python. − This would be covered in Assertions in Python tutorial.
Danh sách các ngoại lệ tiêu chuẩn -
1 | Ngoại lệ Lớp cơ sở cho tất cả các trường hợp ngoại lệ |
2 | Ngăn chặn Được nâng lên khi phương thức tiếp theo [] của trình lặp không trỏ đến bất kỳ đối tượng nào. |
3 | SystemExit Được nâng lên bởi hàm sys.exit []. |
4 | StandardError Lớp cơ sở cho tất cả các trường hợp ngoại lệ tích hợp ngoại trừ Strepitation và SystemExit. |
5 | Arithmeticerror Lớp cơ sở cho tất cả các lỗi xảy ra để tính toán số. |
6 | Overflowerror Tăng khi tính toán vượt quá giới hạn tối đa cho loại số. |
7 | FloatingPulumror Tăng khi tính toán điểm nổi thất bại. |
8 | ZerodivisionError Lớn lên khi phân chia hoặc modulo theo 0 diễn ra cho tất cả các loại số. |
9 | AssitSerror Lớn lên trong trường hợp thất bại của tuyên bố khẳng định. |
10 | Thuộc tính Lớn lên trong trường hợp thất bại của tham chiếu thuộc tính hoặc gán. |
11 | Eoferror Được nâng lên khi không có đầu vào từ hàm raw_input [] hoặc input [] và kết thúc của tệp. |
12 | Nhà nhập khẩu Lớn lên khi một tuyên bố nhập khẩu thất bại. |
13 | Bàn phím Lớn lên khi người dùng gián đoạn thực thi chương trình, thường là bằng cách nhấn ctrl+c. |
14 | Lookuperror Lớp cơ sở cho tất cả các lỗi tra cứu. |
15 | IndexError Nêu ra khi một chỉ số không được tìm thấy trong một chuỗi. |
16 | KeyError Lớn lên khi khóa được chỉ định không được tìm thấy trong từ điển. |
17 | NAMEERROR Lớn lên khi một định danh không được tìm thấy trong không gian tên địa phương hoặc toàn cầu. |
18 | Unboundlocalerror Lớn lên 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ường HERROR Lớp cơ sở cho tất cả các trường hợp ngoại lệ xảy ra bên ngoài môi trường Python. |
20 | Lỗi IO Được nâng lên khi hoạt động đầu vào/ đầu ra không thành công, chẳng hạn như câu lệnh in hoặc hàm open [] khi cố gắng mở một tệp không tồn tại. |
21 | Lỗi IO Được nâng lên khi hoạt động đầu vào/ đầu ra không thành công, chẳng hạn như câu lệnh in hoặc hàm open [] khi cố gắng mở một tệp không tồn tại. |
22 | Lớn lên cho các lỗi liên quan đến hệ điều hành. Lỗi cú pháp |
23 | Lớn lên khi có lỗi trong cú pháp Python. Mác thụt |
24 | Lớn lên khi thụt lề không được chỉ định đúng. Lỗi hệ thống |
25 | SystemExit Được nâng lên bởi hàm sys.exit []. |
26 | StandardError Lớp cơ sở cho tất cả các trường hợp ngoại lệ tích hợp ngoại trừ Strepitation và SystemExit. |
27 | Arithmeticerror Lớp cơ sở cho tất cả các lỗi xảy ra để tính toán số. |
28 | Overflowerror Tăng khi tính toán vượt quá giới hạn tối đa cho loại số. |
29 | FloatingPulumror Tăng khi tính toán điểm nổi thất bại. |
ZerodivisionError
Lớn lên khi phân chia hoặc modulo theo 0 diễn ra cho tất cả các loại số.
AssitSerrorraise-if statement [or to be more accurate, a raise-if-not statement]. An expression is tested, and if the result comes up false, an exception is raised.
Lớn lên trong trường hợp thất bại của tuyên bố khẳng định.
Thuộc tính
Lớn lên trong trường hợp thất bại của tham chiếu thuộc tính hoặc gán.
Eoferror
Được nâng lên khi không có đầu vào từ hàm raw_input [] hoặc input [] và kết thúc của tệp.syntax for assert is −
assert Expression[, Arguments]
Nhà nhập khẩu
Lớn lên khi một tuyên bố nhập khẩu thất bại.
Bàn phím
#!/usr/bin/python def KelvinToFahrenheit[Temperature]: assert [Temperature >= 0],"Colder than absolute zero!" return [[Temperature-273]*1.8]+32 print KelvinToFahrenheit[273] print int[KelvinToFahrenheit[505.78]] print KelvinToFahrenheit[-5]
Lớn lên khi người dùng gián đoạn thực thi chương trình, thường là bằng cách nhấn ctrl+c.
32.0 451 Traceback [most recent call last]: File "test.py", line 9, in print KelvinToFahrenheit[-5] File "test.py", line 4, in KelvinToFahrenheit assert [Temperature >= 0],"Colder than absolute zero!" AssertionError: Colder than absolute zero!
Lookuperror
Lớp cơ sở cho tất cả các lỗi tra cứu.
Khi một tập lệnh Python tăng một ngoại lệ, nó phải xử lý ngoại lệ ngay lập tức nếu không nó sẽ chấm dứt và thoát.
Xử lý một ngoại lệ
Nếu bạn có một số mã đáng ngờ có thể nêu 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 đặt mã đáng ngờ trong một thử: khối. Sau khi thử: Khối, bao gồm một câu lệnh ngoại trừ: theo sau là một khối mã xử lý vấn đề càng thanh lịch càng tốt.try: block. After the try: block, include an except: statement, followed by a block of code which handles the problem as elegantly as possible.
Cú pháp
Đây là cú pháp đơn giản của thử .... ngoại trừ ... Khối khác -
try: You do your operations here; ...................... except ExceptionI: If there is ExceptionI, then execute this block. except ExceptionII: If there is ExceptionII, then execute this block. ...................... else: If there is no exception then execute this block.
Dưới đây là một vài điểm quan trọng về cú pháp nêu trên-
Một câu lệnh thử duy nhất có thể có nhiều câu lệnh. Điều này rất hữu ích khi khối thử chứa các câu lệnh có thể ném các loại ngoại lệ khác nhau.
Bạn cũng có thể cung cấp một điều khoản 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ể bao gồm một điều khoản khác. Mã trong khối khác sẽ thực thi nếu mã trong thử: Khối không tăng ngoại lệ.
Khối khác là một nơi tốt cho mã không cần thử: Bảo vệ của khối.
Thí dụ
Ví dụ này mở một tệp, ghi nội dung trong tệp, và xuất hiện một cách duyên dáng vì không có vấn đề gì cả -
#!/usr/bin/python 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[]
Điều này tạo ra kết quả sau -
Written content in the file successfully
Thí dụ
Ví dụ này mở một tệp, ghi nội dung trong tệp, và xuất hiện một cách duyên dáng vì không có vấn đề gì cả -
#!/usr/bin/python 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"
Điều này tạo ra kết quả sau -
Error: can't find file or read data
Ví dụ này cố gắng mở một tệp mà bạn không có quyền ghi, vì vậy nó làm tăng một ngoại lệ -
Mệnh đề ngoại trừ không có ngoại lệ
try: You do your operations here; ...................... except: If there is any exception, then execute this block. ...................... else: If there is no exception then execute this block.
Bạn cũng có thể sử dụng câu lệnh ngoại trừ không có ngoại lệ được xác định như sau -try-except statement catches all the exceptions that occur. Using this kind of try-except statement is not considered a good programming practice though, because it catches all exceptions but does not make the programmer identify the root cause of the problem that may occur.
Loại câu lệnh thử nghiệm thử này bắt được tất cả các trường hợp ngoại lệ xảy ra. Mặc dù vậy, sử dụng loại tuyên bố thử nghiệm thử này không được coi là một thực tiễn lập trình tốt, bởi vì nó bắt được tất cả các ngoại lệ nhưng không làm cho lập trình viên xác định nguyên nhân gốc rễ của vấn đề có thể xảy ra.
Mệnh đề ngoại trừ có nhiều ngoại lệ
try: You do your operations here; ...................... except[Exception1[, Exception2[,...ExceptionN]]]]: If there is any exception from the given exception list, then execute this block. ...................... else: If there is no exception then execute this block.
Bạn cũng có thể sử dụng cùng một câu lệnh ngoại trừ để xử lý nhiều trường hợp ngoại lệ như sau -
Các điều khoản cố gắngfinally: block along with a try: block. The finally block is a place to put any code that must execute, whether the try-block raised an exception or not. The syntax of the try-finally statement is this −
#!/usr/bin/python def KelvinToFahrenheit[Temperature]: assert [Temperature >= 0],"Colder than absolute zero!" return [[Temperature-273]*1.8]+32 print KelvinToFahrenheit[273] print int[KelvinToFahrenheit[505.78]] print KelvinToFahrenheit[-5]0
Bạn có thể sử dụng một khối cuối cùng: khối cùng với một thử: khối. Khối cuối cùng là một nơi để đặt bất kỳ mã nào phải thực thi, cho dù khối thử có nêu ra ngoại lệ hay không. Cú pháp của câu lệnh thử chung là này-
Thí dụ
#!/usr/bin/python def KelvinToFahrenheit[Temperature]: assert [Temperature >= 0],"Colder than absolute zero!" return [[Temperature-273]*1.8]+32 print KelvinToFahrenheit[273] print int[KelvinToFahrenheit[505.78]] print KelvinToFahrenheit[-5]1
Ví dụ này mở một tệp, ghi nội dung trong tệp, và xuất hiện một cách duyên dáng vì không có vấn đề gì cả -
Error: can't find file or read data
Điều này tạo ra kết quả sau -
#!/usr/bin/python def KelvinToFahrenheit[Temperature]: assert [Temperature >= 0],"Colder than absolute zero!" return [[Temperature-273]*1.8]+32 print KelvinToFahrenheit[273] print int[KelvinToFahrenheit[505.78]] print KelvinToFahrenheit[-5]3
Ví dụ này cố gắng mở một tệp mà bạn không có quyền ghi, vì vậy nó làm tăng một ngoại lệ -
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ó ngoại lệ được xác định như sau -
#!/usr/bin/python def KelvinToFahrenheit[Temperature]: assert [Temperature >= 0],"Colder than absolute zero!" return [[Temperature-273]*1.8]+32 print KelvinToFahrenheit[273] print int[KelvinToFahrenheit[505.78]] print KelvinToFahrenheit[-5]4
Loại câu lệnh thử nghiệm thử này bắt được tất cả các trường hợp ngoại lệ xảy ra. Mặc dù vậy, sử dụng loại tuyên bố thử nghiệm thử này không được coi là một thực tiễn lập trình tốt, bởi vì nó bắt được tất cả các ngoại lệ nhưng không làm cho lập trình viên xác định nguyên nhân gốc rễ của vấn đề có thể xảy ra.
Mệnh đề ngoại trừ có nhiều ngoại lệ
Thí dụ
Ví dụ này mở một tệp, ghi nội dung trong tệp, và xuất hiện một cách duyên dáng vì không có vấn đề gì cả -
#!/usr/bin/python def KelvinToFahrenheit[Temperature]: assert [Temperature >= 0],"Colder than absolute zero!" return [[Temperature-273]*1.8]+32 print KelvinToFahrenheit[273] print int[KelvinToFahrenheit[505.78]] print KelvinToFahrenheit[-5]5
Điều này tạo ra kết quả sau -
#!/usr/bin/python def KelvinToFahrenheit[Temperature]: assert [Temperature >= 0],"Colder than absolute zero!" return [[Temperature-273]*1.8]+32 print KelvinToFahrenheit[273] print int[KelvinToFahrenheit[505.78]] print KelvinToFahrenheit[-5]6
Ví dụ này cố gắng mở một tệp mà bạn không có quyền ghi, vì vậy nó làm tăng một ngoại lệ -
Mệnh đề ngoại trừ không có ngoại lệraise statement is as follows.
Cú pháp
#!/usr/bin/python def KelvinToFahrenheit[Temperature]: assert [Temperature >= 0],"Colder than absolute zero!" return [[Temperature-273]*1.8]+32 print KelvinToFahrenheit[273] print int[KelvinToFahrenheit[505.78]] print KelvinToFahrenheit[-5]7
Bạn cũng có thể sử dụng câu lệnh ngoại trừ không có ngoại lệ được xác định như sau -
Loại câu lệnh thử nghiệm thử này bắt được tất cả các trường hợp ngoại lệ xảy ra. Mặc dù vậy, sử dụng loại tuyên bố thử nghiệm thử này không được coi là một thực tiễn lập trình tốt, bởi vì nó bắt được tất cả các ngoại lệ nhưng không làm cho lập trình viên xác định nguyên nhân gốc rễ của vấn đề có thể xảy ra.
Thí dụ
Ví dụ này mở một tệp, ghi nội dung trong tệp, và xuất hiện một cách duyên dáng vì không có vấn đề gì cả -
#!/usr/bin/python def KelvinToFahrenheit[Temperature]: assert [Temperature >= 0],"Colder than absolute zero!" return [[Temperature-273]*1.8]+32 print KelvinToFahrenheit[273] print int[KelvinToFahrenheit[505.78]] print KelvinToFahrenheit[-5]8
Điều này tạo ra kết quả sau - In order to catch an exception, an "except" clause must refer to the same exception thrown either class object or simple string. For example, to capture above exception, we must write the except clause as follows −
#!/usr/bin/python def KelvinToFahrenheit[Temperature]: assert [Temperature >= 0],"Colder than absolute zero!" return [[Temperature-273]*1.8]+32 print KelvinToFahrenheit[273] print int[KelvinToFahrenheit[505.78]] print KelvinToFahrenheit[-5]9
Ngoại lệ do người dùng xác định
Python cũng cho phép bạn tạo ra các ngoại lệ của riêng mình bằng cách lấy các lớp từ các trường hợp ngoại lệ tích hợp tiêu chuẩn.
Dưới đây là một ví dụ liên quan đến RunTimEError. Ở đây, một lớp được tạo ra được phân lớp 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 một ngoại lệ bị bắt.
Trong khối thử, ngoại lệ do người dùng xác định được nâng lên và bị mắc kẹt trong khối ngoại trừ. Biến E được sử dụng để tạo một thể hiện của lớp mạng của lớp.
32.0 451 Traceback [most recent call last]: File "test.py", line 9, in print KelvinToFahrenheit[-5] File "test.py", line 4, in KelvinToFahrenheit assert [Temperature >= 0],"Colder than absolute zero!" AssertionError: Colder than absolute zero!0
Vì vậy, một khi bạn đã xác định ở lớp trên, bạn có thể tăng ngoại lệ như sau -
32.0 451 Traceback [most recent call last]: File "test.py", line 9, in print KelvinToFahrenheit[-5] File "test.py", line 4, in KelvinToFahrenheit assert [Temperature >= 0],"Colder than absolute zero!" AssertionError: Colder than absolute zero!1