Cách xử lý ngoại lệ (exception) trong Python

Đây là bài 31/54 bài của series môn học Ngôn ngữ lập trình Python

1. Xử lý exception với khối lệnh try

Khi một exception xảy ra, Python sẽ dừng chương trình đột ngột và xuất ra thông báo lỗi. Chúng ta cần xử lý exception để chương trình không bị dừng đột ngột và có thể biết được các lỗi có thể xảy ra để khắc phục sau. Python hỗ trợ chúng ta xử lý các exception với khối lệnh try và khối lệnh except.

Khối lệnh try giúp chúng ta kiểm tra đoạn code trong try có xảy ra exception hay không. Nếu có exception thì exception sẽ được chuyển đến khối lệnh except để xử lý. Ví dụ:

try:
    x = 1/0
    print(x)
except:
    print("An exception occurred!")
Kết quả
An exception occurred!

Trong ví dụ trên, một exception xảy ra do chúng ta chia một số cho 0.

Python cho phép chúng ta bắt nhiều exception cụ thể khác nhau được ném ra từ khối lệnh try.

try:
    x = 1/0
    print(x)
except TypeError:
    print("Data type of variable is not suitable type!")
except ZeroDivisionError:
    print("Cannot divide by 0!")
except:
    print("An exception occurred!")
Kết quả
Cannot divide by 0!

2. Khối lệnh try với khối lệnh else

Chúng ta có thể sử dụng từ khóa else để định nghĩa một khối lệnh (block of code) sẽ được thực thi nếu không có exception nào xảy ra.

try:
    x = 1/1
    print(x)
except ZeroDivisionError:
    print("Cannot divide by 0!")
else:
    print("Nothing wrong.")
Kết quả
1.0
Nothing wrong.

Nếu exception xảy ra thì khối lệnh trong else sẽ không được thực thi.

try:
    x = 1/0
    print(x)
except ZeroDivisionError:
    print("Cannot divide by 0!")
else:
    print("Nothing wrong.")
Kết quả
Cannot divide by 0!

3. Khối lệnh try với khối lệnh finally

Python cho phép chúng ta sử dụng try với khối lệnh finally. Khối lệnh finally luôn luôn được thực thi bất kể khối lệnh try có xảy ra exception hay không.

try:
    x = 1/0
    print(x)
except ZeroDivisionError:
    print("Cannot divide by 0!")
finally:
    print("The 'try except' is finished!")
Kết quả
Cannot divide by 0!
The 'try except' is finished!

Chúng ta thường thực hiện việc đóng các stream khi đọc/ghi file hoặc đóng các kết nối đến database trong khối lệnh finally.

#The try block will raise an error when trying to write to a read-only file
try:
    file = open("gochocit.txt")
    try:
        file.write("Welcome to gochocit.com!")
    except:
        print("Something went wrong when writing to the file!")
    finally:
        # always close file
        file.close()
except:
    print("Something went wrong when opening the file!")
Kết quả
Something went wrong when writing to the file!

4. Sử dụng từ khóa raise trong Python

Python cho phép chúng ta có thể ném ra một exception nếu thỏa một điều kiện nào đó. Từ khóa raise giúp chúng ta làm việc này.

a = 1
b = 0

if b == 0:
  raise Exception("Sorry, cannot divide by 0!")
else:
    print("x = ", a/b)
Kết quả
Traceback (most recent call last):
  File "c:\python-examples\example.py", line 5, in <module>
    raise Exception("Sorry, cannot divide by 0!")
Exception: Sorry, cannot divide by 0!

Chúng ta có thể sử dụng từ khóa raise để ném ra một exception cụ thể.

a = 1
b = 0

if b == 0:
  raise ZeroDivisionError("Sorry, cannot divide by 0!")
else:
    print("x = ", a/b)
Kết quả
Traceback (most recent call last):
  File "c:\python-examples\example.py", line 5, in <module>
    raise ZeroDivisionError("Sorry, cannot divide by 0!")
ZeroDivisionError: Sorry, cannot divide by 0!
5/5 - (1 bình chọn)
Bài trước và bài sau trong môn học<< Lỗi (error) và ngoại lệ (exception) trong PythonXây dựng lớp (class) và tạo đối tượng (object) trong Python >>
Chia sẻ trên mạng xã hội:

Trả lời

Lưu ý:

1) Vui lòng bình luận bằng tiếng Việt có dấu.

2) Khuyến khích sử dụng tên thật và địa chỉ email chính xác.

3) Mọi bình luận trái quy định sẽ bị xóa bỏ.