['Yeah ! Your answer is :', 1]4_______15_______6
['Yeah ! Your answer is :', 1]8
# working of try[]
8_______15_______9def
0Sorry ! You are dividing by zero0
Sorry ! You are dividing by zero0
def
3def
4def
5 Lần gọi thứ hai đến hàmdivide[] đưa ra ngoại lệ ZeroDivisionError và chương trình kết thúc
Chúng tôi chưa bao giờ nhận được đầu ra của lệnh gọi phương thứcdivide[] thứ ba bởi vì chúng tôi đã không xử lý ngoại lệ trong mã của mình
Hãy viết lại phương thức split[] với cách xử lý ngoại lệ phù hợp. Nếu ai đó cố gắng chia cho 0, chúng tôi sẽ bắt ngoại lệ và in thông báo lỗi. Bằng cách này, chương trình sẽ không kết thúc sớm và đầu ra sẽ có ý nghĩa hơn
def divide[x, y]: try: print[f'{x}/{y} is {x / y}'] except ZeroDivisionError as e: print[e] divide[10, 2] divide[10, 0] divide[10, 4]
đầu ra
10/2 is 5.0 division by zero 10/4 is 2.5
Lớp BaseException là gì?
Lớp BaseException là lớp cơ sở của tất cả các ngoại lệ. Nó có bốn lớp con
- Ngoại lệ - đây là lớp cơ sở cho tất cả các ngoại lệ không thoát
- GeneratorExit – Yêu cầu thoát trình tạo
- KeyboardInterrupt – Chương trình bị gián đoạn bởi người dùng
- SystemExit – Yêu cầu thoát khỏi trình thông dịch
Một số lớp ngoại lệ tích hợp
Một số lớp ngoại lệ dựng sẵn trong Python là
- ArithmeticError – đây là lớp cơ sở cho các lỗi số học
- AssertionError – xuất hiện khi một xác nhận không thành công
- AttributeError – khi không tìm thấy thuộc tính
- Bộ đệmLỗi
- EOFError – đọc sau khi kết thúc tệp
- ImportError – khi không tìm thấy mô-đun đã nhập
- LookupError – ngoại lệ cơ bản cho các lỗi tra cứu
- MemoryError – khi hết bộ nhớ xảy ra
- NameError - khi không tìm thấy tên trên toàn cầu
- OSError – lớp cơ sở cho lỗi I/O
- Tham khảoLỗi
- Lỗi runtime
- StopIteration, StopAsyncIteration
- Lỗi cú pháp: cú pháp không hợp lệ
- SystemError – lỗi nội bộ trong Trình thông dịch Python
- TypeError - loại đối số không hợp lệ
- ValueError - giá trị đối số không hợp lệ
Một số lớp cảnh báo tích hợp
Lớp Cảnh báo là lớp cơ sở cho tất cả các cảnh báo. Nó có các lớp con sau
- BytesWarning – cảnh báo liên quan đến byte và bộ đệm, chủ yếu liên quan đến chuyển đổi và so sánh chuỗi
- DeprecationWarning – cảnh báo về các tính năng không dùng nữa
- FutureWarning – lớp cơ sở để cảnh báo về các cấu trúc sẽ thay đổi ngữ nghĩa trong tương lai
- ImportWarning – cảnh báo về lỗi nhập mô-đun
- PendingDeprecationWarning – cảnh báo về các tính năng sẽ không được dùng nữa trong tương lai
- ResourceWarning – cảnh báo sử dụng tài nguyên
- RuntimeWarning – cảnh báo về hành vi thời gian chạy đáng ngờ
- SyntaxWarning – cảnh báo về cú pháp đáng ngờ
- UnicodeWarning – Cảnh báo liên quan đến chuyển đổi Unicode
- UserWarning – cảnh báo được tạo bởi mã người dùng
Xử lý nhiều ngoại lệ trong một khối ngoại trừ duy nhất
Một khối thử có thể có nhiều khối ngoại trừ. Chúng tôi có thể bắt các ngoại lệ cụ thể trong mỗi khối ngoại trừ
def divide[x, y]: try: print[f'{x}/{y} is {x / y}'] except ZeroDivisionError as e: print[e] except TypeError as e: print[e] except ValueError as e: print[e]
Mã trong mọi khối ngoại trừ giống nhau. Trong trường hợp này, chúng ta có thể xử lý nhiều ngoại lệ trong một khối except. Chúng ta có thể chuyển một bộ đối tượng ngoại lệ vào một khối ngoại lệ để bắt nhiều ngoại lệ
def divide[x, y]: try: print[f'{x}/{y} is {x / y}'] except [ZeroDivisionError, TypeError, ValueError] as e: print[e]
Bắt tất cả các ngoại lệ trong một khối ngoại trừ duy nhất
Nếu chúng tôi không chỉ định bất kỳ lớp ngoại lệ nào trong khối ngoại trừ, nó sẽ bắt tất cả các ngoại lệ được đưa ra bởi khối thử. Có lợi khi có điều này khi chúng ta không biết về các trường hợp ngoại lệ mà khối thử có thể đưa ra
Mệnh đề ngoại trừ trống phải là mệnh đề cuối cùng trong chuỗi xử lý ngoại lệ
________số 8_______
Sử dụng khác Chặn bằng thử ngoại trừ
Mã khối khác là tùy chọn. Nó được thực thi khi không có ngoại lệ nào được đưa ra bởi khối thử
def divide[x, y]: try: print[f'{x}/{y} is {x / y}'] except ZeroDivisionError as e: print[e] else: print["divide[] function worked fine."] divide[10, 2] divide[10, 0] divide[10, 4]
đầu ra
Mã khối khác được thực thi hai lần khi khối thử hàm split[] hoạt động mà không có bất kỳ ngoại lệ nào
Sử dụng khối cuối cùng với try-ngoại trừ
Mã khối cuối cùng được thực thi trong tất cả các trường hợp, cho dù có ngoại lệ hay không. Khối cuối cùng được sử dụng để đóng tài nguyên và thực hiện các hoạt động dọn dẹp
def divide[x, y]: try: print[f'{x}/{y} is {x / y}'] except ZeroDivisionError as e: print[e] else: print["divide[] function worked fine."] finally: print["close all the resources here"] divide[10, 2] divide[10, 0] divide[10, 4]
đầu ra
Cú pháp xử lý ngoại lệ Python
Bây giờ chúng ta đã thấy mọi thứ liên quan đến xử lý ngoại lệ trong Python, cú pháp cuối cùng là
try -> except 1...n -> else -> finally
Chúng tôi có thể có nhiều khối ngoại trừ cho một khối thử. Nhưng, chúng ta chỉ có thể có một cái khác và cuối cùng chặn
Tạo lớp ngoại lệ tùy chỉnh
Chúng ta có thể tạo một lớp ngoại lệ tùy chỉnh bằng cách mở rộng lớp Ngoại lệ. Cách tốt nhất là tạo một ngoại lệ cơ sở và sau đó dẫn xuất các lớp ngoại lệ khác. Dưới đây là một số ví dụ về việc tạo các lớp ngoại lệ do người dùng định nghĩa
10/2 is 5.0 Traceback [most recent call last]: File "/Users/pankaj/Documents/PycharmProjects/PythonTutorialPro/hello-world/exception_handling.py", line 6, in divide[10, 0] File "/Users/pankaj/Documents/PycharmProjects/PythonTutorialPro/hello-world/exception_handling.py", line 2, in divide print[f'{x}/{y} is {x / y}'] ZeroDivisionError: division by zero0
Quy ước đặt tên là hậu tố tên của lớp ngoại lệ với "Lỗi"
Tăng ngoại lệ
Chúng tôi có thể sử dụng từ khóa nâng cao để đưa ra một ngoại lệ từ mã của mình. Một số tình huống có thể xảy ra là
- Xác thực tham số đầu vào chức năng không thành công
- Bắt một ngoại lệ và sau đó ném một ngoại lệ tùy chỉnh
10/2 is 5.0 Traceback [most recent call last]: File "/Users/pankaj/Documents/PycharmProjects/PythonTutorialPro/hello-world/exception_handling.py", line 6, in divide[10, 0] File "/Users/pankaj/Documents/PycharmProjects/PythonTutorialPro/hello-world/exception_handling.py", line 2, in divide print[f'{x}/{y} is {x / y}'] ZeroDivisionError: division by zero1
đầu ra
10/2 is 5.0 Traceback [most recent call last]: File "/Users/pankaj/Documents/PycharmProjects/PythonTutorialPro/hello-world/exception_handling.py", line 6, in divide[10, 0] File "/Users/pankaj/Documents/PycharmProjects/PythonTutorialPro/hello-world/exception_handling.py", line 2, in divide print[f'{x}/{y} is {x / y}'] ZeroDivisionError: division by zero2
Ví dụ về khối try-ngoại trừ lồng nhau
Chúng ta có thể có các khối try-ngoại trừ lồng nhau trong Python. Trong trường hợp này, nếu một ngoại lệ được đưa ra trong khối thử lồng nhau, thì khối ngoại trừ lồng nhau sẽ được sử dụng để xử lý nó. Trong trường hợp không thể xử lý ngoại lệ lồng nhau, các khối ngoại trừ bên ngoài được sử dụng để xử lý ngoại lệ