Python - Assertions

Assertions in Python

Các câu lệnh khẳng định (Assertions) trong Python là những câu lệnh khẳng định hoặc giả định một điều kiện là đúng. Nếu điều kiện đó hóa ra là sai, Python sẽ ném ra một AssertionError ngoại lệ. Chúng được sử dụng để phát hiện các lỗi lập trình không bao giờ nên xảy ra nếu mã là chính xác.

  • Cách dễ nhất để nghĩ về một câu lệnh khẳng định là so sánh nó với một câu lệnh raise-if (hoặc để chính xác hơn, một câu lệnh raise-if-not). Một biểu thức được kiểm tra, và nếu kết quả là sai, một ngoại lệ sẽ được ném ra.

  • Các phép kiểm tra được thực hiện bởi câu lệnh assert, từ khóa mới nhất trong Python, được giới thiệu trong phiên bản 1.5.

  • Các lập trình viên thường đặt các khẳng định (assertions) ở đầu một hàm để kiểm tra tính hợp lệ của đầu vào, và sau một lời gọi hàm để kiểm tra tính hợp lệ của đầu ra.

The assert Statement

Trong Python, các câu lệnh khẳng định (assertions) sử dụng từ khóa assert theo sau bởi một biểu thức. Nếu biểu thức đó đánh giá là False, một lỗi AssertionError sẽ được đưa ra. Dưới đây là cú pháp của câu lệnh khẳng định −

assert condition, message

Nơi nào,

  • condition − Một biểu thức boolean mà nên là đúng.

  • message (optional) − Một thông điệp tùy chọn sẽ được hiển thị nếu việc kiểm tra không thành công.

Using Assertions

Các câu lệnh xác nhận (Assertions) thường được sử dụng trong giai đoạn phát triển và kiểm thử để kiểm tra các điều kiện mà lẽ ra luôn phải đúng.

Example

Trong ví dụ sau, chúng ta sử dụng các câu lệnh khẳng định (assertions) để đảm bảo rằng biến "num" nằm trong khoảng hợp lệ từ "0" đến "100". Nếu câu lệnh khẳng định thất bại, Python sẽ phát sinh một "AssertionError", ngăn chặn việc thực thi tiếp theo của câu lệnh print sau đó.

print('Enter marks out of 100:')
num = 75
assert num >= 0 and num <= 100
print('Marks obtained:', num)

num = 125
assert num >= 0 and num <= 100
print('Marks obtained:', num)  # This line won't be reached if assertion fails

Dưới đây là đầu ra của đoạn mã trên −

Enter marks out of 100:
Marks obtained: 75
Traceback (most recent call last):
  File "/home/cg/root/66723bd115007/main.py", line 7, in <module>
    assert num >= 0 and num <= 100
AssertionError

Custom Error Messages

Để hiển thị một thông báo lỗi tùy chỉnh khi một điều kiện kiểm tra không đạt, hãy bao gồm một chuỗi sau biểu thức trong câu lệnh assert −

assert num >= 0 and num <= 100, "Only numbers in the range 0-100 are accepted"

Handling AssertionError

Các câu lệnh xác nhận (assertions) có thể được bắt và xử lý như bất kỳ ngoại lệ nào khác bằng cách sử dụng khối try-except. Nếu không được xử lý, chúng sẽ kết thúc chương trình và tạo ra một traceback.

try:
   num = int(input('Enter a number: '))
   assert num >= 0, "Only non-negative numbers are accepted"
   print(num)
except AssertionError as msg:
   print(msg)

Nó sẽ tạo ra đầu ra sau −

Enter a number: -87
Only non-negative numbers are accepted

Assertions vs. Exceptions

Các câu lệnh xác nhận (Assertions) được sử dụng để kiểm tra trạng thái bên trong và các bất biến (invariants) mà luôn phải đúng. Trong khi đó, các ngoại lệ (exceptions) giúp xử lý lỗi thời gian chạy và các điều kiện bất thường có thể xảy ra trong quá trình thực thi bình thường.

Các câu lệnh xác nhận (assertions) bị tắt theo mặc định trong chế độ tối ưu hóa của Python (-O hoặc python -O script.py ). Do đó, chúng không nên được sử dụng để thực thi các ràng buộc cần thiết cho việc hoạt động đúng của chương trình trong môi trường sản xuất.