time.strptime() undocumented difference python 2.5.1>2.5.2

TYR a.harrowell at gmail.com
Wed Mar 25 15:18:49 EDT 2009


A server that runs one of my programs was upgraded to Debian Lenny
last night, which moved it from Python 2.4.4 to 2.5.2. This caused
immediate trouble. At one point, data is parsed from a Web page, and
among other things a time date group is collected. This is in a nice
human readable format, but I want it in RFC 822 format because it's
going to be used in an outbound GeoRSS feed and it's a requirement.

So the time group is split up with a regex, merged into one string,
and fed to time.strptime() with a fitting format, then passed to
Utils.formatdate() and used. The time group looks like this:
25/03/2009 21:05:00

Code:
if airline not in whitelist:
		      retime = re.split('[-\s:/]', rawtime)
		      timeinput = ''.join(retime)
		      t = time.strptime(timeinput, "%d %m %Y %H %M %S")
		      timeout = Utils.formatdate(t)

Error:
Traceback (most recent call
last):
  File "/home/yorksranter/vfeed-data/bothv7.py", line 46, in
<module>
    t = time.strptime(timeinput, "%d %m %Y %H %M
%S")
  File "/usr/lib/python2.5/_strptime.py", line 330, in
strptime
    (data_string,
format))
ValueError: time data did not match format:  data=25032009210500  fmt=
%d %m %Y %H %M %S

Weirdness:

Python 2.5.2 (r252:60911, Jan  4 2009, 21:59:32) #the
server
[GCC 4.3.2] on
linux2
Type "help", "copyright", "credits" or "license" for more
information.
>>> timeinput = '25032009210500'
>>> import time
>>> t = time.strptime(timeinput, "%d %m %Y %H %M %S")
Traceback (most recent call
last):
  File "<stdin>", line 1, in
<module>
  File "/usr/lib/python2.5/_strptime.py", line 330, in
strptime
    (data_string,
format))
ValueError: time data did not match format:  data=25032009210500  fmt=
%d %m %Y %H %M %S

But....

Python 2.5.1 (r251:54863, Jan 10 2008, 18:01:57) #the laptop
[GCC 4.2.1 (SUSE Linux)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> timeinput = '25032009210500'
>>> t = time.strptime(timeinput, "%d %m %Y %H %M %S")
>>> print t
(2009, 3, 25, 21, 5, 0, 2, 84, -1)

Docs (http://docs.python.org/library/time.html#time.strptime) say:
Parses a string representing a time according to a format. If I send
it through str() to make absolutely sure it is a string I get the same
error.

I note from the changelog that there was a change affecting
time.strptime()...(http://www.python.org/download/releases/2.5.2/
NEWS.txt)

- Bug #1730389: Have time.strptime() match spaces in a format argument
with
  ``\s+`` instead of ``\s*``.

- Bug #1290505: Properly clear time.strptime's locale cache when the
locale
  changes between calls.  Backport of r54646 and r54647.

I don't see that either of these should break it, but it's got to be a
suspect.



More information about the Python-list mailing list