What is the pythonic way to handle the situation where if a condition exists the loop should be executed, but if it does not something else should be done?

Why am I asking?
Today's code review included a for...else structure. I've rarely seen such a thing, and even knowing it exists, cannot recall ever using it! The coder intended to implement the scenario (above) but did not realise that the else-clause means 'execute if the loop ended without using break'. She thought it meant 'if there's nothing in the iterable, execute the else clause' (per if...then...else... ie the two clauses are mutually-exclusive*) - which one assumes is the reason why the BDfL is claimed to have said it should never have been implemented (this way). She neglected to test the exception properly, and was lulled into a false sense of security by the coverage reporting 100%. Oops!

*see also the more commonly-used try...except...else...[finally...]


When/how does this occur?
Our client is more than a little commercially-sensitive. So as a really simple scenario, imagine a report is required, naming people who have become eligible for something, eg students qualified to enter an advanced class, Oscar film award nominees, entrants who have fulfilled the requirements of a competition from which a winner will be randomly selected...

The names all appear in a list, so the most frequent use-case is trivial:

        print( "And the winners are:" )
        for name in list:
                print( name )

but, if no-one actually qualifies, a warning message is required, eg

        print( "Sorry, no-one is eligible" )


Possible solution:
To make anything more than the trivial case readable, I think I'd put the list processing into one function, and the exception into another (except that this case is so trivial), ie

        if list:
                process_list() #the heading and for-loop, as above
        else:
                print( "Sorry...


Others wanted to add a semaphore/flag inside the loop to indicate if it was executed at least once. Yes, could even use the else clause then!

The ideas went (rapidly) down-hill from there...


Is there another, more pythonic, approach to conditional (for/while) loop processing?

--
Regards,
=dn
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to