-1. Assertions are ignored when Python is run with -O, so we definitely don't want to encourage relying on asserts to ensure users pass the correct value. But even if that wasn't an issue, I consider the `else: ValueError()` to be significantly more readable.
Otherwise, the alternative offered by Steve Barnes of using a dict for the input options works well when you have a large number of possible inputs with entirely different behaviors. Although I'd say for anything with around 5 or less options, the `else: ValueError()` makes more sense for its simplicity.
On Thu, Jul 2, 2020 at 7:43 PM Artemis firstname.lastname@example.org wrote:
Often, I know that a variable should have one of a set of values, and I want to determine which one, with an if/elif/else clause. This looks something like this:
if foo == 1: # do a elif foo == 2: # do b elif foo == 3: # do c else: raise ValueError('foo must be 1, 2 or 3')
Sometimes, I just do
if foo == 1: # do a elif foo == 2: # do b else: # do c
But this is less readable and allows errors to slip past. My proposal is to allow the following syntax:
if foo == 1: # do a elif foo == 2: # do b else foo == 3: # do c
Or perhaps the more readable version:
if foo == 1: # do a elif foo == 2: # do b else assert foo == 3: # do c
Both of these options are backward compatible, since currently nothing is allowed between the `else` and the `:`. This would be roughly equivalent to
if foo == 1: # do a elif foo == 2: # do b else: assert foo == 3 # do c
But shorter and more readable, since it puts the assertion at the same levels as the others. Thoughts? _______________________________________________ Python-ideas mailing list -- email@example.com To unsubscribe send an email to firstname.lastname@example.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://email@example.com/message/ZKAQK7... Code of Conduct: http://python.org/psf/codeofconduct/