Chuyển đến nội dung chính

Cách sử dụng câu lệnh assert trong Python

Triển khai câu lệnh assert trong Python rất đơn giản: Ta dùng assert để kiểm tra điều kiện và hiển thị thông báo nếu điều kiện sai.
· 6 phút đọc

Khám phá cùng AI

Câu lệnh assert trong lập trình Python là một công cụ để xác lập những điều kiện tiên quyết trong mã của bạn. Chúng hoạt động bằng cách cho phép nhà phát triển kiểm chứng các giả định trong mã. Trong hướng dẫn này, chúng ta sẽ thành thạo câu lệnh assert của Python, bao gồm cú pháp, cách dùng và các ứng dụng trong gỡ lỗi và phát hiện lỗi. Khi nắm vững câu lệnh assert của Python, chúng ta sẽ tiến gần hơn một bước tới việc trở thành một Lập trình viên Python chuyên nghiệp. 

Câu trả lời ngắn: Cách viết assertion trong Python 

Cú pháp của câu lệnh assert rất đơn giản:

assert condition, message

Ở đây, condition là biểu thức được kiểm tra, còn message là thông báo lỗi tùy chọn sẽ xuất hiện nếu assertion thất bại.

Dưới đây là vài assertion bạn có thể thử trong mã Python để làm quen. Ở ví dụ đầu tiên, biểu thức 3<4>5 sai về mặt logic nên Python sẽ phát sinh AssertionError với thông báo ta cung cấp: "Math does not work that way." Ở ví dụ thứ hai, biểu thức 0==0 là một hằng đúng nên bạn sẽ không thấy thông báo "This shouldn't throw an error." 

assert 3<4>5, "Math does not work that way."
assert 0==0, "This shouldn't throw an error."

Tổng quan về câu lệnh assert của Python

Giờ hãy xem kỹ hơn câu lệnh assert của Python, bao gồm cách dùng và lý do sử dụng. Kết thúc hướng dẫn này, bạn sẽ nắm vững cách dùng câu lệnh assert trong Python. 

Assertion trong Python là gì?

Nói chung, assertion trong lập trình là các cấu trúc dùng để xác minh tính đúng đắn của các điều kiện trong mã nguồn. Nói cách khác, đó là những điều kiện mà chương trình phải tuân thủ, nếu không sẽ phát sinh lỗi. Bằng cách dùng từ khóa "assert", Python hiện thực các assertion này với cú pháp rất trực quan: câu lệnh assert cho phép chúng ta tạo ra các assertion đó.

Khi nào nên dùng assertion trong Python

Assertion rất hữu ích cho việc gỡ lỗi, kiểm chứng giả định và đảm bảo mã hoạt động như mong đợi trong những điều kiện cụ thể. Chúng cho phép bạn nói cho máy tính biết bạn kỳ vọng điều gì và yêu cầu nó dừng lại khi đang làm khác đi. Điều này hữu ích khi xây dựng chương trình mới, thêm tính năng hoặc cập nhật một ứng dụng hiện có.

Assertion tỏ ra hiệu quả trong các tình huống cần áp đặt tiền điều kiện, hậu điều kiện hoặc bất biến trong mã nguồn. Chúng đóng vai trò như hàng rào an toàn, ngăn mã tiếp tục chạy nếu một số điều kiện bị vi phạm, từ đó giúp phát hiện sớm lỗi tiềm ẩn.

Bằng cách đặt assertion một cách có chủ đích xuyên suốt mã, bạn có thể bắt lỗi gần với nơi phát sinh, đơn giản hóa việc gỡ lỗi. Lộ trình nghề nghiệp Python Developer của DataCamp là khóa học tuyệt vời cho người học ở mọi trình độ để luyện kỹ năng lập trình hàm, vì bao gồm bài tập từ cơ bản đến nâng cao.

Khi nào không nên dùng assertion trong Python

Mặc dù assertion rất hữu ích trong giai đoạn phát triển, vẫn có những trường hợp không nên dùng chúng.

Điều quan trọng cần hiểu là khi mã của bạn được biên dịch cho môi trường sản xuất, assertion có thể bị vô hiệu hóa toàn cục. Điều này có nghĩa là bạn không nên dựa vào assertion để xử lý vấn đề lúc chạy, như khi người dùng nhập dữ liệu sai. Thay vào đó, chúng nên được dùng cho vấn đề trong phát triển, như xác định lỗi logic hoặc sai sót tính toán.

Để xử lý lỗi hoặc kiểm tra dữ liệu trong mã chạy thật, hãy sử dụng cơ chế xử lý ngoại lệ để mã có thể phục hồi một cách an toàn, ghi lại thông tin phục vụ gỡ lỗi và cung cấp phản hồi có ý nghĩa cho người dùng.

Bạn có thể tìm hiểu thêm về cách phát hiện và sửa lỗi trong hướng dẫn Xử lý ngoại lệ và lỗi trong Python hoặc qua khóa học Associate Data Scientist in Python của chúng tôi. 

Những lỗi thường gặp và hiểu lầm với câu lệnh assert trong Python

Một lỗi phổ biến khi dùng câu lệnh assert trong Python là sử dụng dấu ngoặc đơn. Đây là lỗi dễ hiểu vì nhiều hàm dùng dấu ngoặc và việc thêm chúng như phản xạ tự nhiên. Tuy nhiên, câu lệnh assert về mặt kỹ thuật không phải là một hàm trong Python nên nó dùng cú pháp đặc biệt. Nếu bạn dùng dấu ngoặc, nhiều khả năng sẽ gặp cảnh báo cú pháp và lỗi logic.

Ví dụ lỗi do dùng dấu ngoặc trong câu lệnh assert.SyntaxWarning: assertion is always true, perhaps remove parentheses?

Một lỗi phổ biến khác là quên dấu phẩy sau điều kiện. Làm vậy sẽ dẫn đến lỗi cú pháp.

Ví dụ lỗi do thiếu dấu phẩy trong câu lệnh assert.SyntaxError: invalid syntax

Ngoại lệ AssertionError

Một ngoại lệ AssertionError sẽ được phát sinh bất cứ khi nào các điều kiện của assertion bị vi phạm. Lỗi này dừng việc thực thi chương trình; mọi thông báo lỗi tùy chọn bạn đặt sẽ được hiển thị. Vì assertion chủ yếu dùng để kiểm thử mã trong giai đoạn phát triển, nếu bạn nhận được thông báo ngoại lệ AssertionError trong Python, bạn thường nên xem xét nghiêm túc. Nó có thể chỉ ra một khiếm khuyết nghiêm trọng trong mã của bạn.

Ứng dụng thực tiễn

Câu lệnh assert có thể dùng trong nhiều ứng dụng thực tiễn trong Python. Khóa học tương tác Viết hàm trong Python của chúng tôi cung cấp nhiều bài tập giúp bạn thành thạo. Dưới đây là vài ví dụ. 

Dùng assert bên trong hàm

Một cách hữu ích để dùng assertion là chèn chúng vào trong các hàm. Điều này giúp đảm bảo hàm của bạn hoạt động như dự định.

def divide(a, b):
assert b != 0, "Division by zero!"
return a / b

# Test cases
print(divide(10, 2))  # Output: 5.0
print(divide(8, 0))   # AssertionError: Division by zero!

Dùng assert với unittest

Kiểm thử mã là bước thiết yếu trong quy trình phát triển. Unittest là thư viện được thiết kế để giúp bạn kiểm thử mã hiệu quả, và nó sử dụng các câu lệnh assert để làm điều đó. Đây cũng là cách tôi thường dùng assert nhất. Dưới đây là một ví dụ bạn có thể thấy trong khóa học Introduction to Testing in Python của chúng tôi. 

import unittest

class TestMathFunctions(unittest.TestCase):
    def test_addition(self):
        self.assertEqual(2 + 2, 4)

    def test_subtraction(self):
        self.assertEqual(5 - 3, 2)

    def test_division(self):
        self.assertRaises(ZeroDivisionError, divide, 10, 0)

if __name__ == '__main__':
    unittest.main()

Kết luận

Câu lệnh assert của Python là công cụ quan trọng để gỡ lỗi và xác minh điều kiện trong mã trong giai đoạn phát triển. Dù đơn giản và hiệu quả để kiểm thử giả định, nó không nên được dựa vào trong môi trường sản xuất do có thể bị vô hiệu hóa trong mã đã biên dịch. Thay vào đó, hãy dùng xử lý ngoại lệ để quản lý lỗi một cách vững chắc. 

Hãy tham khảo thêm hướng dẫn Thực hành và hướng dẫn viết mã tốt của chúng tôi nếu bạn còn thắc mắc.

Amberle McKee

Tác giả

Amberle McKee

Tôi là Tiến sĩ với 13 năm kinh nghiệm làm việc với dữ liệu trong môi trường nghiên cứu sinh học. Tôi phát triển phần mềm bằng nhiều ngôn ngữ lập trình, bao gồm Python, MATLAB và R. Tôi đam mê chia sẻ tình yêu học hỏi của mình với mọi người.

Chủ đề

Liên quan