YADTR (Yet Another DateTime Rant)
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Thu Mar 27 19:41:59 EDT 2014
On Thu, 27 Mar 2014 08:52:24 -0400, Roy Smith wrote:
> In article <mailman.8613.1395917059.18130.python-list at python.org>,
> Chris Angelico <rosuav at gmail.com> wrote:
>> It's not "equally braindead", it follows a simple and logical rule:
>> Only the day portion is negative.
>
> Simple and logical, yes. But also entirely braindead.
Do you think it is "braindead" for __str__ to return something which
follows the internal representation of the object?
Note that I'm not asking if that is the best choice for every object, or
even the best choice for any object. You've made an extremely strong
claim, by calling something "braindead" you're essentially arguing that
this is an *utterly irredeemable choice whatsoever* with absolutely no
redeeming features.
Hyperbole is fun, that's why we do it. It allows us to build up a nice
feeling of righteous indignation over something utterly outrageous and
indefensible, without having to worry about inconvenient distractions
like other points of view :-)
>> That might not be perfectly suited to all situations
>
> Give ma a real-life situation where you would want such behavior.
Easy -- I'm debugging timedelta routines, and I want to easily see that
the timedeltas calculated match what I expect them to be when I print
them. The quickest, easiest and simplest way is for str(timedelta) to
follow the internal representation.
Oh look, that's exactly what the docs say:
"String representations of timedelta objects are normalized similarly to
their internal representation. This leads to somewhat unusual results for
negative timedeltas."
as Skip has already pointed out.
Is this the *best* choice for a timedelta? Probably not. But it's a
simple, logical, *reasonable* choice. It only fails the "reasonable" test
if you insist that timedelta objects *must* match the time-keeping
conventions of native English speakers, and any other convention is
unspeakable. For all we know, maybe (say) Koreans or Egyptians or Gaelic
Scots do say something like "It was a day ago, less four hours" meaning
twenty hours ago. Stranger things happen in natural language, and we
ought to be cautious about insisting that English conventions are
universal.
(Given Johannes Bauer's reaction, we can be fairly certain that German
speakers follow a similar convention to English speakers. Which shouldn't
be terribly surprising, since English is a Germanic language.)
A few seconds searching the bug tracker shows that this is not, in fact,
a bug in timedelta but probably a deliberate feature:
http://bugs.python.org/issue9430
This one is also relevant: http://bugs.python.org/issue1569623
Alas, the discussion appears to have been on #python-dev, which
(probably) means it is not archived anywhere.
--
Steven D'Aprano
http://import-that.dreamwidth.org/
More information about the Python-list
mailing list