_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()
"""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
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