CodeGym /Các khóa học /Python SELF VI /Xử lý nhiều ngoại lệ

Xử lý nhiều ngoại lệ

Python SELF VI
Mức độ , Bài học
Có sẵn

4.1 Bắt nhiều ngoại lệ

Python cho phép xử lý nhiều ngoại lệ bằng cách sử dụng nhiều khối except hoặc một khối except với bộ ngoại lệ. Hãy cùng xem xét cả hai cách tiếp cận.

Nhiều khối except

Bạn có thể sử dụng nhiều khối except để xử lý các loại ngoại lệ khác nhau theo cách khác nhau.


try:
    # Mã có thể gây ra ngoại lệ
    result = int("abc")
except ValueError:
    print("Lỗi: giá trị không hợp lệ.")
except ZeroDivisionError:
    print("Lỗi: chia cho không.")

Một khối except với bộ ngoại lệ

Bạn có thể xử lý nhiều ngoại lệ trong một khối except bằng cách truyền chúng dưới dạng bộ.


try:
    # Mã có thể gây ra ngoại lệ
    result = int("abc")
except (ValueError, ZeroDivisionError) as e:
    print(f"Đã xảy ra lỗi: {e}")

Sử dụng except NameError as var

Khi xử lý ngoại lệ, bạn có thể sử dụng cú pháp except <ExceptionType> as <variable> để lấy đối tượng ngoại lệ. Điều này cho phép truy cập vào thông tin về ngoại lệ, chẳng hạn như thông báo lỗi và các thuộc tính khác.


try:
    # Mã có thể gây ra NameError
    print(undeclared_variable)
except NameError as e:
    print(f"Đã xảy ra lỗi: {e}")
    print(f"Loại lỗi: {type(e)}")

4.2 Phạm vi biến lỗi

Biến lưu ngoại lệ (e trong ví dụ trên) chỉ có sẵn chỉ trong khối except của nó. Bên ngoài khối này, biến không khả dụng.


try:
    # Mã có thể gây ra NameError
    print(undeclared_variable)
except NameError as e:
    print(f"Đã xảy ra lỗi: {e}")
    print(f"Loại lỗi: {type(e)}")
# Ở đây e đã không còn khả dụng, và dòng tiếp theo sẽ gây ra lỗi NameError
# print(e)  # NameError: name 'e' is not defined

Nếu bạn muốn thực hiện điều gì đó quan trọng với ngoại lệ ngoài khối của nó, bạn cần lưu trữ nó trong một biến riêng. Ví dụ:


exception = None
try:
    # Mã có thể gây ra ngoại lệ
    result = int("abc")
except ValueError as e:
    exception = e
    print("Lỗi: giá trị không hợp lệ.")
except ZeroDivisionError as e:
    exception = e
    print("Lỗi: chia cho không.")

print(exception)

Lưu ý rằng biến exception lưu trữ ngoại lệ phát sinh cuối cùng, điều này có thể hữu ích khi xử lý tiếp theo ngoài khối try.

4.3 Những thông tin hữu ích trong lỗi

Đối tượng ngoại lệ chứa thông tin về lỗi. Tùy thuộc vào loại ngoại lệ, đối tượng có thể chứa các thuộc tính khác nhau.

Đây là một số thuộc tính chung có sẵn cho hầu hết các ngoại lệ:

  • args: Bộ chứa các đối số được truyền khi tạo ngoại lệ. Thông thường đây là thông báo lỗi.
  • message: Chuỗi chứa thông báo lỗi (trong một số ngoại lệ).
  • __str__: Phương thức trả về biểu diễn chuỗi của ngoại lệ. Phương thức này được sử dụng để lấy biểu diễn văn bản của lỗi, sẽ được trả về khi sử dụng hàm print() trên đối tượng ngoại lệ.

Ví dụ:


try:
    # Mã có thể gây ra ValueError
    result = int("abc")
except ValueError as e:
    print(f"Đã xảy ra lỗi: {e}")
    print(f"Tham số lỗi: {e.args}")
    print(f"Thông báo lỗi: {str(e)}")

Ví dụ về xử lý nhiều ngoại lệ


try:
    # Mã có thể gây ra nhiều loại ngoại lệ
    result = 10 / 0
except (ValueError, ZeroDivisionError) as e:
    print(f"Đã xảy ra lỗi: {e}")
    print(f"Loại lỗi: {type(e)}")
    print(f"Tham số lỗi: {e.args}")

Nếu phát sinh ValueError hoặc ZeroDivisionError, chúng sẽ bị bắt bởi khối except. Thông tin về ngoại lệ sẽ có sẵn thông qua biến e. Kết quả sẽ bao gồm loại lỗi và các tham số được truyền khi tạo ngoại lệ.

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION