Python - Kiểm tra (Assertions)
Xin chào, các nhà lập trình nhân dịp! Hôm nay, chúng ta sẽ bơi sâu vào thế giới kiểm tra trong Python. Là một giáo viên máy tính hàng xóm thân thiện, tôi rất hứng thú để hướng dẫn bạn qua chủ đề thú vị này. Hãy bắt đầu hành trình này cùng nhau!
Kiểm tra trong Python
Hãy tưởng tượng bạn đang xây một cây nhà trên cây. Bạn sẽ không bắt đầu gài ván n钉hau mà không kiểm tra trước tiên rằng nền của bạn có đủ mạnh khỏe không? Đó chính xác là điều gì kiểm tra làm trong lập trình. Chúng giúp chúng ta kiểm tra xem một số điều kiện có đúng trước khi chúng ta tiếp tục với mã của mình.
Trong Python, các kiểm tra là cách để nói, "Tôi tin rằng điều kiện này là đúng, và nếu không, có điều gì đó đã đi sai hết!" Chúng giống như các điểm kiểm tra nhỏ trong mã của bạn đảm bảo rằng mọi thứ đều như cần thiết.
Câu lệnh assert
Cú pháp cơ bản của kiểm tra trong Python rất đơn giản:
assert điều_kiện, thông điệp
Ở đây, điều_kiện
là điều gì chúng ta đang kiểm tra, và thông điệp
là giải thích tùy chọn xuất hiện nếu kiểm tra thất bại.
Hãy xem một ví dụ đơn giản:
x = 5
assert x == 5, "x nên là 5"
print("Mã tiếp tục...")
Trong trường hợp này, kiểm tra sẽ không có lỗi vì x thực sự là 5, và mã của chúng ta sẽ tiếp tục chạy. Nhưng điều gì xảy ra nếu chúng ta thay đổi giá trị của x?
x = 10
assert x == 5, "x nên là 5"
print("Dòng này sẽ không bao giờ được đạt!")
Ôi! Điều này sẽ gây ra một AssertionError với thông điệp tùy chỉnh của chúng ta, "x nên là 5".
Sử dụng Kiểm tra
Kiểm tra rất hữu ích trong nhiều tình huống khác nhau. Hãy khám phá một số:
1. Kiểm tra đầu vào của hàm
def tính_diện_tích_hình_chữ_nhật(dài, rộng):
assert dài > 0 and rộng > 0, "Độ dài và độ rộng phải là số dương"
return dài * rộng
# Điều này sẽ hoạt động
print(tính_diện_tích_hình_chữ_nhật(5, 3))
# Điều này sẽ gây ra một AssertionError
print(tính_diện_tích_hình_chữ_nhật(-1, 3))
Ở đây, chúng ta đang đảm bảo rằng không ai không thử tính diện tích của một hình chữ nhật với các chiều âm hoặc bằng không. Đó sẽ là một hình chữ nhật rất kỳ lạ, phải không?
2. Xác minh trạng thái nội bộ
class Tài_khoản_ngân_hàng:
def __init__(self, số_dư_bắt đầu):
self.số_dư = số_dư_bắt đầu
assert self.số_dư >= 0, "Số dư bắt đầu không thể là số âm"
def rút_tiền(self, số_tiền):
assert số_tiền > 0, "Số tiền rút phải là số dương"
assert self.số_dư >= số_tiền, "Số dư không đủ"
self.số_dư -= số_tiền
tài_khoản = Tài_khoản_ngân_hàng(100)
tài_khoản.rút_tiền(50) # Điều này hoạt động
tài_khoản.rút_tiền(60) # Điều này gây ra một AssertionError
Trong ví dụ này, chúng ta đang sử dụng kiểm tra để đảm bảo rằng tài khoản ngân hàng của chúng ta hành xử chính xác. Chúng ta không thể bắt đầu với số dư âm hoặc rút nhiều tiền hơn mình có. Nếu chỉ ngân hàng thực tế có thể như vậy!
Thông điệp lỗi Tùy chỉnh
Như chúng ta đã thấy, chúng ta có thể thêm thông điệp lỗi tùy chỉnh vào các kiểm tra của mình. Những thông điệp này rất hữu ích khi gỡ lỗi:
def chia(a, b):
assert b != 0, f"Không thể chia {a} cho không"
return a / b
print(chia(10, 2)) # Điều này hoạt động
print(chia(10, 0)) # Điều này gây ra một AssertionError với thông điệp tùy chỉnh của chúng ta
Xử lý AssertionError
Đôi khi, chúng ta có thể muốn chặn và xử lý các AssertionError thay vì để chúng gây ra sự cố chương trình của mình. Chúng ta có thể làm điều này bằng cách sử dụng khối try-except:
def hàm_rủi_ro(x):
assert x > 0, "x phải là số dương"
return 1 / x
try:
kết_quả = hàm_rủi_ro(-5)
except AssertionError as e:
print(f"Một kiểm tra thất bại: {e}")
kết_quả = None
print(f"Kết quả là: {kết_quả}")
Điều này cho phép chương trình của chúng ta tiếp tục chạy ngay cả khi một kiểm tra thất bại, điều này có thể hữu ích trong một số tình huống.
Kiểm tra vs. Ngoại lệ
Bạn có thể đang suy nghĩ, "Tại sao sử dụng kiểm tra khi chúng ta có ngoại lệ?" Đây là một câu hỏi tuyệt vời! Hãy xem xét các sự khác biệt chính:
Kiểm tra | Ngoại lệ |
---|---|
Được sử dụng để kiểm tra lỗi của nhà lập trình | Được sử dụng để xử lý lỗi chạy thời gian |
Nên được sử dụng cho các điều kiện không nên xảy ra | Được sử dụng cho các điều kiện lỗi mong đợi |
Có thể bị tắt toàn cục | Luôn hoạt động |
Chủ yếu là công cụ gỡ lỗi | Part của chiến lược xử lý lỗi |
Kiểm tra giống như các kiểm tra an toàn mà chúng ta làm trước khi bắt đầu chuyến điroller coaster. Ngoại lệ giống như dây an toàn giữ chúng ta nếu có điều gì đó xảy ra trong khi chúng ta đang đi.
Tóm lại, kiểm tra là một công cụ mạnh mẽ trong bộ công cụ của nhà lập trình Python. Chúng giúp chúng ta viết mã có sự độ bền vững và tin cậy hơn bằng cách phát hiện các vấn đề tiềm ẩn sớm. Hãy nhớ, luôn tốt hơn là thất bại nhanh và thất bại to lớn khi có điều gì đó không mong đợi xảy ra trong mã của bạn.
Khi bạn tiếp tục hành trình Python của mình, hãy giữ ý niệm về kiểm tra. Chúng giống như những người bảo vệ trung thành, giám sát mã của bạn và đảm bảo rằng mọi thứ đều như cần thiết. Chúc các bạn lập trình viên tương lai may mắn!
Credits: Image by storyset