copysort patch, was RE: [Python-Dev]inline sort option
Alex Martelli
aleaxit at yahoo.com
Tue Oct 28 13:30:46 EST 2003
On Tuesday 28 October 2003 07:10 pm, Michael Chermside wrote:
> Alex Martelli writes:
> > BTW, I think I should point out one POSSIBLE problem with
> > classmethods -- since unfortunately they CAN be called on an
> > instance, and will ignore that instance, this may confuse an
> > unsuspecting user.
>
> Alex, that's a good point, and one we should be careful of.
Thanks, that's why I brought the issue up.
> However, (as you said) I suspect that the unsuspecting users
> will always call it with zero arguments. So long as that call
> always fails (preferably with a useful error message) I think
> we should be OK.
>
> So what if we make the error message maximally useful? Something
*VERY good idea*
> like this:
>
> _privateObj= Object()
> def sorted(iteratorToSort=_privateObj):
> if iteratorToSort == _privateObj:
> raise TypeError('sorted is a classmethod of list ' +
> 'taking an iterator argument')
> else:
> <... normal body here ...>
>
> The only thing I've done here was to make the text of the message
> more helpful (I've even left the type of the exception as TypeError
> even though that might not be the most useful thing). Okay...
> there's one other change... if you pass 2 or more arguments, then
> it will complain that it expected "at least 0 arguments", but try
> it once with 0 arguments and you'll immediately understand.
Could we perhaps deal with the latter issue by adding a *args to sorted's
signature, and changing the condition on the 'if' to:
if iteratorToSort is _privateObj or args:
raise TypeError # etc etc
? Maybe w/"a single iterator argument" in the error message's text?
{alternatively, if we don't care about keyword args, just having the
*args in the signature and checking "if len(args) != 1: ..." might be OK}
Alex
More information about the Python-Dev
mailing list