Kaydet (Commit) 5d0bf944 authored tarafından Brett Cannon's avatar Brett Cannon

Change time.strptime() to raise ValueError whenever there is an error in the

format string.  Before exceptions generated by the internal code propagated up
to the user and were not helpful.

Closes bug #1340337.
üst 076b7325
......@@ -287,7 +287,20 @@ def strptime(data_string, format="%a %b %d %H:%M:%S %Y"):
_regex_cache.clear()
format_regex = _regex_cache.get(format)
if not format_regex:
format_regex = time_re.compile(format)
try:
format_regex = time_re.compile(format)
# KeyError raised when a bad format is found; can be specified as
# \\, in which case it was a stray % but with a space after it
except KeyError, err:
bad_directive = err.args[0]
if bad_directive == "\\":
bad_directive = "%"
del err
raise ValueError("'%s' is a bad directive in format '%s'" %
(bad_directive, format))
# IndexError only occurs when the format string is "%"
except IndexError:
raise ValueError("stray %% in format '%s'" % format)
_regex_cache[format] = format_regex
finally:
_cache_lock.release()
......
......@@ -197,10 +197,20 @@ class StrptimeTests(unittest.TestCase):
"""Create testing time tuple."""
self.time_tuple = time.gmtime()
def test_TypeError(self):
# Make sure ValueError is raised when match fails
def test_ValueError(self):
# Make sure ValueError is raised when match fails or format is bad
self.assertRaises(ValueError, _strptime.strptime, data_string="%d",
format="%A")
for bad_format in ("%", "% ", "%e"):
try:
_strptime.strptime("2005", bad_format)
except ValueError:
continue
except Exception, err:
self.fail("'%s' raised %s, not ValueError" %
(bad_format, err.__class__.__name__))
else:
self.fail("'%s' did not raise ValueError" % bad_format)
def test_unconverteddata(self):
# Check ValueError is raised when there is unconverted data
......
......@@ -276,6 +276,9 @@ Extension Modules
Library
-------
- Bug #1340337: change time.strptime() to always return ValueError when there
is an error in the format string.
- Patch #754022: Greatly enhanced webbrowser.py (by Oleg Broytmann).
- Bug #729103: pydoc.py: Fix docother() method to accept additional
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment