Allows users to write composable assert
s that are not stripped away in optimized mode.
- Single simple, pythonic, fast, tested, typed, documented function. That's it!
- Because
safe_assert
is a function, it can be easily composed with other functions - Fully typed with annotations and checked with mypy, PEP561 compatible
pip install safe-assert
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.
How does it work internally?
It internally raises AssertionError
that is also used by the assert
keyword itself.
See docs to learn more.
MIT.