Thử ngoại trừ trong thử ngoại trừ Python

('Yeah ! Your answer is :', 1)
4_______15_______6
('Yeah ! Your answer is :', 1)
8 # working of try()8_______15_______9def0
Sorry ! You are dividing by zero
0
Sorry ! You are dividing by zero
0 def3def4def5

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

Thử ngoại trừ trong thử ngoại trừ Python
Xử lý ngoại lệ Python


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

  1. Ngoại lệ - đây là lớp cơ sở cho tất cả các ngoại lệ không thoát
  2. GeneratorExit – Yêu cầu thoát trình tạo
  3. KeyboardInterrupt – Chương trình bị gián đoạn bởi người dùng
  4. 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

Thử ngoại trừ trong thử ngoại trừ Python
Python Thử ngoại trừ khối khác

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

Thử ngoại trừ trong thử ngoại trừ Python
Python Thử ngoại trừ Khác Cuối cùng chặn


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 zero
0

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

đầ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 zero
2


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ệ

bạn có thể có một thử

Bạn có thể có nhiều ngoại lệ trong TRY không

Trong Python, các khối ngoại lệ thử có thể được sử dụng để bắt và phản hồi một hoặc nhiều ngoại lệ . Trong trường hợp một quy trình phát sinh nhiều ngoại lệ có thể xảy ra, tất cả chúng có thể được xử lý bằng một mệnh đề ngoại trừ duy nhất.

Một lần thử có thể có nhiều Ngoại lệ không?

Có thể có nhiều khối ngoại trừ cho một khối thử . Hãy cho chúng tôi xem các ví dụ xử lý nhiều ngoại lệ của Python. Khi trình thông dịch gặp một ngoại lệ, nó sẽ kiểm tra các khối ngoại trừ được liên kết với khối thử đó. Các khối ngoại trừ này có thể khai báo loại ngoại lệ mà chúng xử lý.

chúng ta có thể sử dụng khác với try

Khối thử cho phép bạn kiểm tra lỗi của một khối mã. Khối ngoại trừ cho phép bạn xử lý lỗi. Khối khác cho phép bạn thực thi mã khi không có lỗi . Khối cuối cùng cho phép bạn thực thi mã, bất kể kết quả của khối thử và ngoại trừ.