Python - Khối try-except

Xin chào, các nhà phát triển Python tương lai! Tôi rất vui mừng hướng dẫn bạn đi qua thế giới tuyệt vời của việc xử lý lỗi trong Python. Là một giáo viên khoa học máy tính hàng xóm bạn thân thiện, tôi đã thấy rất nhiều học sinh bị gặp lỗi, nhưng đừng sợ! Khi kết thúc hướng dẫn này, bạn sẽ xử lý ngoại lệ như một chuyên gia. Hãy bắt đầu!

Python - try-except Block

Python Try-Except Block

Hãy tưởng tượng bạn đang nấu một công thức mới. Bạn không chắc chắn liệu bạn có tất cả các nguyên liệu hay không, nhưng bạn vẫn muốn thử nào. Đó chính xác là điều gì khối try-except làm trong Python - nó cho phép bạn thử một đoạn mã và xử lý mọi lỗi tiềm ẩn một cách thanh lịch.

Dưới đây là cấu trúc cơ bản:

try:
# Mã có thể gây ra ngoại lệ
except:
# Mã xử lý ngoại lệ

Hãy xem một ví dụ đơn giản:

try:
number = int(input("Nhập một số: "))
result = 10 / number
print(f"10 chia cho {number} là {result}")
except:
print("Oops! Có gì đó không ổn.")

Trong đoạn mã này:

  1. Chúng ta yêu cầu người dùng nhập một số.
  2. Chúng ta cố gắng chia 10 cho số đó.
  3. Nếu có bất kỳ lỗi gì xảy ra (như nhập số 0 hoặc một chuỗi không phải là số), chúng ta sẽ bắt lỗi và in ra một thông báo thân thiện.

Hãy chạy đoạn mã này với các đầu vào khác nhau. Nhập 2, sau đó 0, sau đó "chuối". Bạn thấy nó xử lý mỗi trường hợp như thế nào?

Xử lý Nhiều Ngoại Lệ

Bây giờ, hãy làm chúng ta cụ thể hơn. Các loại lỗi khác nhau có thể xảy ra, và chúng ta có thể muốn xử lý chúng một cách khác nhau. Đó như có nhiều kiệt đầu trội khác nhau cho các loại thương nặng khác nhau.

try:
number = int(input("Nhập một số: "))
result = 10 / number
print(f"10 chia cho {number} là {result}")
except ValueError:
print("Đó không phải là một số hợp lệ!")
except ZeroDivisionError:
print("Bạn không thể chia cho không!")
except:
print("Có một lỗi khác đã xảy ra.")

Ở đây, chúng ta đang xử lý ba kịch bản:

  1. Nếu người dùng nhập một thứ không phải là số (ValueError)
  2. Nếu người dùng nhập số không (ZeroDivisionError)
  3. Bất kỳ lỗi bất ngờ nào khác

Chạy đoạn mã này với các đầu vào như "năm", 0, 2, và thấy nó phản hồi khác nhau như thế nào!

Sử Dụng Điều Khoản Else với Khối Try-Except

Đôi khi, chúng ta muốn chạy một đoạn mã chỉ khi không có ngoại lệ xảy ra. Đó là nơi điều khoản else có tác dụng. Hãy nghĩ về nó như một phần thưởng khi mọi thứ diễn ra suôn sẻ!

try:
number = int(input("Nhập một số dương: "))
if number <= 0:
raise ValueError("Đó không phải là một số dương!")
result = 10 / number
except ValueError as ve:
print(f"Lỗi: {ve}")
except ZeroDivisionError:
print("Bạn không thể chia cho không!")
else:
print(f"10 chia cho {number} là {result}")
print("Cảm ơn bạn đã nhập một số hợp lệ!")

Trong ví dụ này:

  1. Chúng ta kiểm tra xem số có dương hay không.
  2. Nếu không, chúng ta nâng lỗi ValueError riêng.
  3. Nếu không có ngoại lệ xảy ra, khối else sẽ chạy, đưa ra một thông báo thân thiện.

Điều Khoản Finally

Cuối cùng nhưng không kém phần quan trọng, hãy gặp điều khoản finally. Khối mã này sẽ chạy bất kể điều gì - dù có xảy ra ngoại lệ hay không. Đó như là làm sạch sau khi nấu ăn, dù công thức thành công hay thất bại.

try:
file = open("important_data.txt", "r")
content = file.read()
result = 10 / int(content)
except FileNotFoundError:
print("Tệp không tồn tại!")
except ValueError:
print("Tệp không chứa một số hợp lệ!")
except ZeroDivisionError:
print("Số trong tệp là không!")
else:
print(f"Kết quả là: {result}")
finally:
print("Đóng tệp...")
file.close()

Trong ví dụ này:

  1. Chúng ta cố gắng mở một tệp và đọc một số từ đó.
  2. Chúng ta xử lý các lỗi tiềm ẩn khác nhau.
  3. Nếu thành công, chúng ta in kết quả.
  4. Bất kể điều gì xảy ra, chúng ta đảm bảo đóng tệp trong khối finally.

Tóm Tắt Các Phương Pháp Xử Lý Ngoại Lệ

Dưới đây là bảng tóm tắt các phương pháp xử lý ngoại lệ mà chúng ta đã học:

Phương thức Mô tả Cách sử dụng
try Bao gồm mã có thể gây ra ngoại lệ Luôn được sử dụng với except, else hoặc finally
except Xử lý các ngoại lệ cụ thể Bắt và xử lý lỗi
else Chạy nếu không có ngoại lệ xảy ra trong khối try Thực hiện mã chỉ nếu try thành công
finally Luôn thực hiện, bất kể có ngoại lệ hay không Thực hiện các hoạt động dọn dẹp (ví dụ: đóng tệp)
raise Tự động nâng lỗi Tạo các điều kiện lỗi tùy chỉnh

Nhớ rằng, việc xử lý lỗi tốt như mặc chiếc cảm độc - có thể có vẻ không cần thiết đến khi bạn thực sự cần nó! Thực hành các khái niệm này, và sớm bạn sẽ viết mã Python đầy đủ, chống lỗi như một chuyên gia.

Chúc bạn mãi mãi mã nguồn mãi mãi được xử lý một cách thanh lịch!

Credits: Image by storyset