On Tue, 20 Dec 2005 09:16:03 +1100, Ben Finney <[EMAIL PROTECTED]> wrote:

>[EMAIL PROTECTED] writes:
>> Ben Finney wrote:
>>> Is there some behaviour other than "evaluate to False" or "raise an
>>> exception", that could indicate "not comparable"?
>>
>> Yes: return NotImplemented.  Note that the == operator automagically
>> returns False in this case.
>>
>>     >>> "spam".__eq__("spam")
>>     True
>>     >>> "spam".__eq__("ham")
>>     False
>>     >>> "spam".__eq__(23)
>>     NotImplemented
>>
>> This way, the user could explicitly call __eq__ and check for
>> NotImplemented if he desires the exceptional behavior.
>
>Thanks, I was unaware of the standard usage of NotImplemented. That
>seems like a sensible solution.
>
>    <URL:http://docs.python.org/ref/types.html#l2h-29>
>
OTOH, that says the truth value is True, so this does not fail:

 >>> assert 'spam'.__eq__(23)
 >>>

Which seems counterintuitive. The explicit value test

 >>> assert 'spam'.__eq__(23) is NotImplemented

would succeed irrespective of truth value,
but it seems contorted and unpythonic to have to write

 >>> assert 'spam'.__eq__(23) is False
 Traceback (most recent call last):
   File "<stdin>", line 1, in ?
 AssertionError
 >>>

to get the effect you might naively expect from

 >>> assert 'spam'.__eq__(23)


I wonder what the rationale for the NotImplemented True truth value was, as 
opposed to False.

On the third hand, I recently posted an idea of using NotImplemented
as a (handy because predefined) logically true sentinel value to return
from a test function to distinguish not_applicable from applicable_and_ok
when desired, yet allowing assert testfun(...) to succeed either way.
That code would have to use another boolishly True sentinel if NotImplemented
were changed to have False truth value.

Maybe it would be useful to have a couple of builtin sentinels like TrueSentinel
and FalseSentinel (or sentinel_t and sentinel_f or pick some names ;-) so we
wouldn't be tempted to misuse unique builtins like NotImplemented and Exception 
etc.

Regards,
Bengt Richter
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to