On 16 January 2018 at 17:36, Sylvain MARIE <sylvain.ma...@schneider-electric.com> wrote: > (trying with direct reply this time) > >> Why do you do this? What's the requirement for delaying evaluation of the >> condition? > > Thanks for challenging my poorly chosen examples :) > > The primary requirement is about *catching* > unwanted/uncontrolled/heterogenous exceptions happening in the underlying > functions that are combined together to provide the validation means, so as > to provide a uniform/consistent outcome however diverse the underlying > functions are (they can return booleans or raise exceptions, or both). > > In your proposal, if 'is_foo_compliant' raises an exception, it will not be > caught by 'assert_valid', therefore the ValidationError will not be raised. > So this is not what I want as an application developer.
Ah, OK. But nothing in your proposal for a new statement suggests you wanted that, and assert doesn't work like that, so I hadn't realised that's what you were after. You could of course simply do: def assert_valid(expr, help_msg): # Catch exceptions in expr() as you see fit if not expr(): raise ValidationError(help_msg) assert_valid(lambda: 0 <= surf < 10000 and is_foo_compliant(surf), help_msg="surface should be 0=<x<10000 or foo compliant") No need for a whole expression language :-) Paul _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/