Xử lý ngoại lệ trong Python Sử dụng câu lệnh try, only and last

Trong hướng dẫn này, bạn sẽ học cách xử lý các ngoại lệ trong chương trình Python của mình bằng cách sử dụng các câu lệnh try, NGOẠI trừ và cuối cùng với sự trợ giúp của các ví dụ.

Video: Xử lý ngoại lệ trong Python (thử… ngoại trừ… cuối cùng)

Các ngoại lệ trong Python

Python có nhiều ngoại lệ tích hợp được đưa ra khi chương trình của bạn gặp lỗi (một cái gì đó trong chương trình bị lỗi).

Khi những ngoại lệ này xảy ra, trình thông dịch Python dừng quy trình hiện tại và chuyển nó cho quy trình gọi cho đến khi nó được xử lý. Nếu không được xử lý, chương trình sẽ bị sập.

Ví dụ, chúng ta hãy xem xét một chương trình mà chúng ta có một hàm Agọi hàm B, đến lượt nó sẽ gọi hàm C. Nếu một ngoại lệ xảy ra trong hàm Cnhưng không được xử lý trong C, thì ngoại lệ đó sẽ được chuyển đến Brồi đến A.

Nếu không bao giờ được xử lý, một thông báo lỗi sẽ hiển thị và chương trình của chúng tôi đột ngột dừng đột ngột.

Bắt ngoại lệ bằng Python

Trong Python, các ngoại lệ có thể được xử lý bằng một trycâu lệnh.

Hoạt động quan trọng có thể tạo ra một ngoại lệ được đặt bên trong trymệnh đề. Mã xử lý các ngoại lệ được viết trong exceptmệnh đề.

Do đó, chúng tôi có thể chọn những hoạt động để thực hiện khi chúng tôi đã bắt được ngoại lệ. Đây là một ví dụ đơn giản.

 # import module sys to get the type of exception import sys randomList = ('a', 0, 2) for entry in randomList: try: print("The entry is", entry) r = 1/int(entry) break except: print("Oops!", sys.exc_info()(0), "occurred.") print("Next entry.") print() print("The reciprocal of", entry, "is", r)

Đầu ra

Mục nhập là Rất tiếc! xảy ra. Mục tiếp theo. Mục nhập là 0 Rất tiếc! xảy ra. Mục tiếp theo. Mục nhập là 2 Số nghịch đảo của 2 là 0,5

Trong chương trình này, chúng tôi lặp qua các giá trị của danh sách randomList. Như đã đề cập trước đây, phần có thể gây ra ngoại lệ được đặt bên trong trykhối.

Nếu không có ngoại lệ nào xảy ra, exceptkhối sẽ bị bỏ qua và luồng bình thường tiếp tục (cho giá trị cuối cùng). Nhưng nếu có bất kỳ ngoại lệ nào xảy ra, nó sẽ bị chặn bởi exceptkhối (giá trị thứ nhất và thứ hai).

Ở đây, chúng tôi in tên của ngoại lệ bằng cách sử dụng exc_info()hàm bên trong sysmô-đun. Chúng ta có thể thấy rằng anguyên nhân ValueError0nguyên nhân ZeroDivisionError.

Vì mọi ngoại lệ trong Python đều kế thừa từ Exceptionlớp cơ sở , chúng ta cũng có thể thực hiện tác vụ trên theo cách sau:

 # import module sys to get the type of exception import sys randomList = ('a', 0, 2) for entry in randomList: try: print("The entry is", entry) r = 1/int(entry) break except Exception as e: print("Oops!", e.__class__, "occurred.") print("Next entry.") print() print("The reciprocal of", entry, "is", r)

Chương trình này có đầu ra tương tự như chương trình trên.

Bắt các ngoại lệ cụ thể trong Python

Trong ví dụ trên, chúng tôi đã không đề cập đến bất kỳ ngoại lệ cụ thể nào trong exceptmệnh đề.

Đây không phải là một phương pháp lập trình tốt vì nó sẽ bắt tất cả các ngoại lệ và xử lý mọi trường hợp theo cùng một cách. Chúng ta có thể chỉ định ngoại lệ nào mà một exceptmệnh đề phải bắt.

Một trymệnh đề có thể có bất kỳ số exceptmệnh đề nào để xử lý các ngoại lệ khác nhau, tuy nhiên, chỉ một mệnh đề sẽ được thực thi trong trường hợp ngoại lệ xảy ra.

Chúng ta có thể sử dụng một bộ giá trị để chỉ định nhiều ngoại lệ trong một mệnh đề ngoại trừ. Đây là một mã giả ví dụ.

 try: # do something pass except ValueError: # handle ValueError exception pass except (TypeError, ZeroDivisionError): # handle multiple exceptions # TypeError and ZeroDivisionError pass except: # handle all other exceptions pass

Nâng cao ngoại lệ trong Python

Trong lập trình Python, các ngoại lệ được đưa ra khi lỗi xảy ra trong thời gian chạy. Chúng tôi cũng có thể tăng các ngoại lệ theo cách thủ công bằng cách sử dụng raisetừ khóa.

Chúng tôi có thể tùy chọn chuyển các giá trị cho ngoại lệ để làm rõ lý do tại sao ngoại lệ đó được đưa ra.

 >>> raise KeyboardInterrupt Traceback (most recent call last):… KeyboardInterrupt >>> raise MemoryError("This is an argument") Traceback (most recent call last):… MemoryError: This is an argument >>> try:… a = int(input("Enter a positive integer: "))… if a <= 0:… raise ValueError("That is not a positive number!")… except ValueError as ve:… print(ve)… Enter a positive integer: -2 That is not a positive number!

Python hãy thử với mệnh đề else

Trong một số tình huống, bạn có thể muốn chạy một khối mã nhất định nếu khối mã bên trong trychạy mà không có bất kỳ lỗi nào. Đối với những trường hợp này, bạn có thể sử dụng elsetừ khóa tùy chọn với trycâu lệnh.

Lưu ý : Các ngoại lệ trong mệnh đề else không được xử lý bởi các mệnh đề ngoại trừ trước đó.

Hãy xem một ví dụ:

 # program to print the reciprocal of even numbers try: num = int(input("Enter a number: ")) assert num % 2 == 0 except: print("Not an even number!") else: reciprocal = 1/num print(reciprocal)

Đầu ra

Nếu chúng ta vượt qua một số lẻ:

 Nhập một số: 1 Không phải là số chẵn!

Nếu chúng ta chuyển một số chẵn, đối ứng sẽ được tính toán và hiển thị.

 Nhập một số: 4 0,25

Tuy nhiên, nếu chúng ta vượt qua 0, chúng ta sẽ nhận được ZeroDivisionErrorvì khối mã bên trong elsekhông được xử lý bằng phần trước except.

 Enter a number: 0 Traceback (most recent call last): File "", line 7, in reciprocal = 1/num ZeroDivisionError: division by zero

Python try… finally

The try statement in Python can have an optional finally clause. This clause is executed no matter what, and is generally used to release external resources.

For example, we may be connected to a remote data center through the network or working with a file or a Graphical User Interface (GUI).

In all these circumstances, we must clean up the resource before the program comes to a halt whether it successfully ran or not. These actions (closing a file, GUI or disconnecting from network) are performed in the finally clause to guarantee the execution.

Here is an example of file operations to illustrate this.

 try: f = open("test.txt",encoding = 'utf-8') # perform file operations finally: f.close()

Kiểu cấu trúc này đảm bảo rằng tệp được đóng ngay cả khi một ngoại lệ xảy ra trong quá trình thực thi chương trình.

thú vị bài viết...