Assertions in Python
Assertions in Python are statements that assert or assume a condition to be true. If the condition turns out to be false, Python raises an AssertionError exception. They are used to detect programming errors that should never occur if the code is correct.
-
The easiest way to think of an assertion is to liken it to a raise-if statement (or to be more accurate, a raise-if-not statement). An expression is tested, and if the result comes up false, an exception is raised.
-
Assertions are carried out by the assert statement, the newest keyword to Python, introduced in version 1.5.
-
Programmers often place assertions at the start of a function to check for valid input, and after a function call to check for valid output.
The assert Statement
In Python, assertions use the assert keyword followed by an expression. If the expression evaluates to False, an AssertionError is raised. Following is the syntax of assertion −
assert condition, message
Where,
-
condition − A boolean expression that should be true.
-
message (optional) − An optional message to be displayed if the assertion fails.
Using Assertions
Assertions are generally used during development and testing phases to check conditions that should always hold true.
Example
In the following example, we are using assertions to ensure that the variable “num” falls within the valid range of “0” to “100”. If the assertion fails, Python raises an “AssertionError”, preventing further execution of the subsequent print statement −
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
Following is the output of the above code −
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
To display a custom error message when an assertion fails, include a string after the expression in the assert statement −
assert num >= 0 and num <= 100, "Only numbers in the range 0-100 are accepted"
Handling AssertionError
Assertions can be caught and handled like any other exception using a try-except block. If they are not handled, they will terminate the program and produce a 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)
It will produce the following output −
Enter a number: -87 Only non-negative numbers are accepted
Assertions vs. Exceptions
Assertions are used to check internal state and invariants that should always be true. Whereas, exceptions helps in handling runtime errors and exceptional conditions that may occur during normal execution.
Assertions are disabled by default in Python”s optimized mode (-O or python -O script.py). Therefore, they should not be used to enforce constraints that are required for the correct functioning of the program in production environments.