[Python-ideas] Repurpose `assert' into a general-purpose check
Ned Batchelder
ned at nedbatchelder.com
Mon Nov 27 22:34:37 EST 2017
On 11/27/17 9:12 PM, Ivan Pozdeev via Python-ideas wrote:
> The `assert' statment was created the same as in previous languages
> like C/C++: a check to only do in debug mode, when you can't yet trust
> your code to manage and pass around internal data correctly. Examples
> are array bounds and object state integrity constraints.
>
> Unlike C, Python does the aforementioned checks all the time, i.e.
> it's effectively always in "debug mode". Furthermore, validation
> checks are an extremily common use case.
>
> I have been using assert in my in-house code for input validation for
> a long time, the only thing preventing me from doing the same in
> public code is the fact that it only raises AssertionError's while
> library code is expected to raise TypeError or ValueError on invalid
> input.
>
> The last drop that incited me to do this proposition was
> https://stackoverflow.com/questions/2142202/what-are-acceptable-use-cases-for-pythons-assert-statement
> where none of the _seven_ answer authors (beside me) managed to make a
> _single realistic use case_ for `assert' as a debug-only check.
>
> ---
>
> So, I'm hereby proposing to:
>
> * make `assert' stay in optimized mode
> * change its syntax to raise other types of exceptions
>
> E.g.: "assert condition, type, value" or "assert condition, type,
> exception_constructor_argument(s)" to maintain backward compatibility.
>
You are proposing:
assert condition, type, value
Why not just use Python as it is now, with this:?
if not condition: raise type(value)
I don't see a reason to change the assert statement. You can do what you
need without the change.
--Ned.
More information about the Python-ideas
mailing list