safe-assert
safe-assert copied to clipboard
Safe and composable assert for Python that can be used together with optimised mode
safe-assert
Allows users to write composable asserts that are not stripped away in optimized mode.
Features
- Single simple, pythonic, fast, tested, typed, documented function. That's it!
- Because
safe_assertis a function, it can be easily composed with other functions - Fully typed with annotations and checked with mypy, PEP561 compatible
Installation
pip install safe-assert
Examples
The usage is identical to assert keyword, but a function:
from safe_assert import safe_assert
def sort_positive_numbers(numbers: List[int]) -> List[int]:
safe_assert(all(num >= 0 for num in numbers), 'found negative')
return sorted(numbers)
sort_positive_numbers([1, 2, 3]) # => will work
sort_positive_numbers([-1, 2, 3])
# => will fail in runtime with `AssertionError`
How is it different from regular assert?
The major one is that it would not be stripped away with -O flag.
So, it still allows to write declarative checks that are safe in production.
The second one is that you can compose it as any other regular function.
Useful in conjunction with dry-python projects.
Internals
How does it work internally?
It internally raises AssertionError that is also used by the assert keyword itself.
See docs to learn more.
License
MIT.