[ python-Feature Requests-906746 ] int object need more informative error message

SourceForge.net noreply at sourceforge.net
Fri May 21 14:48:06 EDT 2004


Feature Requests item #906746, was opened at 2004-02-29 03:14
Message generated for change (Comment added) made by nascheme
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=355470&aid=906746&group_id=5470

Category: None
Group: None
>Status: Closed
>Resolution: Invalid
Priority: 5
Submitted By: George Yoshida (quiver)
Assigned to: Nobody/Anonymous (nobody)
Summary: int object need more informative error message

Initial Comment:
When int objects encounter a NotImplementedError, 
they don't say much about what the problem is and are 
too unfriendly.

Error messages can be more verbose.

>>> reduce(int.__add__, (1, 2L))
NotImplemented

>>> reduce(int.__add__, (1L, 2))
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: descriptor '__add__' requires a 'int' object but 
received a 'long'


----------------------------------------------------------------------

>Comment By: Neil Schemenauer (nascheme)
Date: 2004-05-21 18:48

Message:
Logged In: YES 
user_id=35752

Armin is completely correct.  One more point is that
NotImplemented is not the same as NotImplementedError.  The
name similarity is unfortunate because they really have no
relation.  I'm marking the the bug as invalid as I don't
think there is anything to fix.

----------------------------------------------------------------------

Comment By: Armin Rigo (arigo)
Date: 2004-05-21 16:14

Message:
Logged In: YES 
user_id=4771

What you report are not error messages generated by
integers, but part of a general internal mecanism.

The golden rule with all __xxx__ special methods is that
they should not be called directly.  This is especially true
for binary methods like __add__ which have pretty complex
internal semantics.  The expression x+y is not equivalent to
x.__add__(y): roughly, althought it first tries
x.__add__(y), it checks if this returned NotImplemented and
calls y.__radd__(x) if it did.  But there are a number of
subtle rules and special cases.

All special methods are meant to be called by language
operators (e.g. x+y, `x`,...); for special usages like
reduce(), all operators are also available as built-in
functions either directly (e.g. repr) or in the module named
'operator' (e.g. operator.add).

Finally, unbound method objects like int.__add__ are not to
be used unless one is really aware of what is going on.

----------------------------------------------------------------------

Comment By: Raymond Hettinger (rhettinger)
Date: 2004-05-21 06:09

Message:
Logged In: YES 
user_id=80475

Unfortunately, there may not be any flexibility here.  Instead 
of being just an error message, NotImplemented is a 
constant that has meaning to other layers of code.  I don't 
see a way to change this or even attach a more informative 
error message.  

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=355470&aid=906746&group_id=5470



More information about the Python-bugs-list mailing list