Xử lý lỗi trong Python
Trong bài viết này, chúng tôi sẽ giải thích cách xử lý lỗi trong Python.
YouTube Video
Xử lý lỗi trong Python
Xử lý lỗi trong Python chủ yếu được thực hiện bằng cách sử dụng các từ khóa try
, except
, else
và finally
. Sử dụng các cấu trúc này cho phép bạn phản hồi hợp lý khi xuất hiện lỗi trong chương trình của bạn. Bên dưới, chúng tôi sẽ giải thích cách sử dụng từng cái.
Khối try
Trong khối try
, bạn viết mã mà bạn muốn thực thi. Nếu xảy ra lỗi trong khối này, chương trình sẽ ngay lập tức chuyển sang khối except
.
1try:
2 # Code that may raise an error (division by zero, for example)
3 #number = int(input("Enter a number: "))
4 number = int("abc")
5 result = 10 / number
6 print("Result:", result)
7except ValueError as e:
8 # Handle invalid input (e.g. non-numeric input)
9 print("Invalid input. Please enter a whole number.")
10 print(f"Value error: {e}")
11except ZeroDivisionError as e:
12 # Handle division by zero error
13 print("Cannot divide by zero!")
14 print(f"Zero division error: {e}")
- Đoạn mã này là một ví dụ về việc phát hiện lỗi trong khối
try
và xử lý chúng một cách thích hợp bằng cách bắt lỗiValueError
hoặcZeroDivisionError
.
Khối except
Trong khối except
, bạn viết mã sẽ được thực thi khi xuất hiện một lỗi (exception) cụ thể. Bạn cũng có thể xử lý các lỗi cụ thể tùy thuộc vào loại exception xảy ra.
1try:
2 #number = int(input("Enter a number: "))
3 number = 0
4 result = 10 / number
5 print("Result:", result)
6except ZeroDivisionError as e:
7 print("Cannot divide by zero!")
8 print(f"Zero division error: {e}")
9except ValueError as e:
10 print("Input was not a valid integer.")
11 print(f"Value error: {e}")
- Đoạn mã này là một ví dụ về việc thực hiện các xử lý khác nhau cho từng loại ngoại lệ trong khối
except
khi có lỗi xảy ra trong khốitry
.
Xử lý nhiều exception cùng một lúc
Hãy chỉ định một tuple khi nhiều loại exception có thể chia sẻ cùng một logic xử lý.
1try:
2 my_list = [1, 2]
3 result = my_list[3] + 10 / 0
4except (IndexError, ZeroDivisionError) as e:
5 print(f"Exception occurred: {e}")
- Đoạn mã này là một ví dụ về việc bắt cả hai ngoại lệ
IndexError
vàZeroDivisionError
cùng lúc và xử lý các ngoại lệ theo cùng một cách.
Xử lý mọi exception mà không phân biệt
Bỏ qua tham số của except
nếu bạn muốn xử lý mọi loại exception trong một khối duy nhất.
1try:
2 # This code might cause some exception
3 result = "10" + 5 # TypeError
4except Exception as e:
5 print("Unexpected error")
- Tuy nhiên, xử lý các ngoại lệ cụ thể thay vì bắt không điều kiện tất cả các ngoại lệ sẽ hữu ích hơn cho việc tìm lỗi và gỡ lỗi. Bất cứ khi nào có thể, chỉ xử lý rõ ràng các ngoại lệ đã dự đoán trước như
ValueError
hoặcTypeError
sẽ làm tăng độ ổn định của mã nguồn của bạn.
Khối else
Khối else
chỉ được thực thi nếu không có lỗi nào xảy ra trong khối try
.
1try:
2 #number = int(input("Enter a number: "))
3 number = 5
4 result = 10 / number
5except ZeroDivisionError as e:
6 print("Cannot divide by zero!")
7 print(f"Zero division error: {e}")
8except ValueError as e:
9 print("Input was not a valid integer.")
10 print(f"Value error: {e}")
11else:
12 # This block will execute only if no exceptions were raised
13 print("Result:", result)
- Đoạn mã này là một ví dụ trong đó khối
else
chỉ được thực thi nếu không có lỗi nào xảy ra trong khốitry
.
Khối finally
Khối finally
được sử dụng để viết mã sẽ luôn được thực thi ở cuối, bất kể có lỗi xảy ra trong khối try
hay không. Nó rất hữu ích để giải phóng tài nguyên hoặc thực hiện các nhiệm vụ dọn dẹp.
1try:
2 #number = int(input("Enter a number: "))
3 number = int("abc")
4 result = 10 / number
5except ZeroDivisionError as e:
6 print("Cannot divide by zero!")
7 print(f"Zero division error: {e}")
8except ValueError as e:
9 print("Input was not a valid integer.")
10 print(f"Value error: {e}")
11else:
12 # This block will execute only if no exceptions were raised
13 print("Result:", result)
14finally:
15 # This block will always execute, regardless of whether an exception was raised
16 print("Execution completed.")
- Đoạn mã này là một ví dụ chứng minh rằng khối
finally
sẽ được thực thi bất kể có ngoại lệ xảy ra hay không.
Từ khoá raise
Cũng có thể phát sinh một ngoại lệ bằng cách sử dụng từ khoá raise
khi một số điều kiện trong mã hiện tại không được đáp ứng.
1def divide(a, b):
2 if b == 0:
3 raise ValueError("Cannot divide by zero.")
4 return a / b
5
6try:
7 result = divide(10, 0)
8except ValueError as e:
9 print(f"Error: {e}")
- Đoạn mã này là một ví dụ về việc chủ động phát sinh ngoại lệ bằng từ khóa
raise
khi một điều kiện không được đáp ứng.
Kết luận
Bằng cách xử lý lỗi theo cách này, bạn có thể tránh cho chương trình bị dừng, hiển thị thông báo thích hợp cho người dùng và tiếp tục xử lý chương trình tiếp theo.
Bạn có thể làm theo bài viết trên bằng cách sử dụng Visual Studio Code trên kênh YouTube của chúng tôi. Vui lòng ghé thăm kênh YouTube.