It's fair to note that complex arguments to assertions can be hacked with:

*assert* cond, (

    f'{conputesomething} {and more}'

    f''{some more}'

)


The exception type can't be changed, though.

On Sat, Sep 11, 2021 at 9:17 AM Juancarlo Añez <apal...@gmail.com> wrote:

> Stephen,
>
> Assertions have their roots in mathematics, as does most everything in
> programming languages.
>
> I'm happy about dropping the DBC theme and rebooting to make *assert* easier
> to use so it gets used more.
>
> I liked the suggestion of:
>
> *assert *cond:
>
>     # prepare failure information
>
>     *raise *ExType(args)
>
>
> Because the current:
>
> *assert *cond, arg
>
>
> Will always raise AssertionError, and do a str(arg), which means that
> *arg* must be simple, or rely on a function that creates more complex
> reporting.
>
> It think it would be fine if ExtType->AssertionError is enforced. Then
> there could be a hierarchy of AssertionError depending on the type of
> problem or its severity.
>
> Of course, none of this will make sense to programmers with a strong
> belief that assertions must always be turned off in production runs.
>
> I, on the other hand, believe that any complex computation or algorithm
> should assert its expected state and abort if the expectations are not met,
> even when the reason for the failure is unknown. Think about financial,
> insurance, transportation, or medical algorithms.
>
> By epistemological reasons a failure caused by a bug is almost *_always_* 
> unexpected,
> and the reasons for the failure are unknown at runtime (a shorter version
> is that "programmers don't write bugs on purpose, so bugs are always
> unforseen").
>
>
> On Sat, Sep 11, 2021 at 12:32 AM Stephen J. Turnbull <
> stephenjturnb...@gmail.com> wrote:
>
>> Juancarlo A�+Pez writes:
>>  >     assert cond:
>>  >          # Write some debugging info to a log.
>>  >          ...
>>  >          raise ExtType(args)
>>  >
>>  > I like the idea of preparing the arguments for the assertion message
>> in a
>>  > context that gets executed only when the assertion fails.
>>
>> The more I see this elaborated, the less I like it.  "assert" has a
>> traditional meaning in programming, which is only a slight extension
>> on the English meaning (that you can turn the check off for
>> performance).
>>
>> Although the idea that assert could be the fundamental building block
>> for design-by-contract (DBC), to my mind this has three problems.
>>
>> (1) You're coopting a keyword that has a consistent established
>>     meaning in English, in programming languages in general, and in
>>     Python, and changing that meaning.
>>
>> (2) I doubt that "assert" alone is sufficient for DBC.  In practice,
>>     you'll want a more expressive, larger vocabulary.  It's not clear
>>     that *any* of that vocabulary is best expressed by "assert" at
>>     this point.  If not, why mess with what works?
>>
>> (3) There's a subtle difference between an assertion and a contract.
>>     An assertion is a statement of fact: it's either right or it's
>>     wrong.  But the whole point of contracts in the real world is that
>>     they are constraints on behavior to be enforced.  The assumption
>>     is that it's possible to be in violation of the contract.  The
>>     point of *asserting* something is that you believe it's absolutely
>>     true, there's no point in going on if it's false.  You have to
>>     start over.
>>
>>     A presumption that violation is possible  may not be true of the
>>     contracts in DBC, I don't know.  But I would prefer not to mix the
>>     difficulties of the semantics of "contract" with the simplicity of
>>     the semantics of "assert".
>>
>> Steve
>>
>>
>
> --
> Juancarlo *Añez*
>


-- 
Juancarlo *Añez*
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/BUX2AHAJRPKOX2MTNEK4IOP5V3TH7JJW/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to