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!