[Python-Dev] unittest assertRaisesRegex bug?

Ethan Furman ethan at stoneleaf.us
Wed Mar 19 22:37:42 CET 2014


Here's the code in question:

         class PsuedoFloat:
             def __init__(self, value):
                 self.value = float(value)
             def __int__(self):
                 return int(self.value)

         pi = PsuedoFloat(3.1415)

         self.assertRaisesRegex(TypeError, '%x format: an integer is required, not PsuedoFloat', '%x'.__mod__, pi),

Here's the exception:

======================================================================
ERROR: test_formatting (test.test_unicode.UnicodeTest)
----------------------------------------------------------------------
TypeError: 'PsuedoFloat' object is not callable

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
   File "/home/ethan/source/python/issue19995/Lib/test/test_unicode.py", line 1156, in test_formatting
     self.assertRaisesRegex(TypeError, '%c'.__mod__, pi),
   File "/home/ethan/source/python/issue19995/Lib/unittest/case.py", line 1235, in assertRaisesRegex
     return context.handle('assertRaisesRegex', callable_obj, args, kwargs)
   File "/home/ethan/source/python/issue19995/Lib/unittest/case.py", line 161, in handle
     callable_obj(*args, **kwargs)
   File "/home/ethan/source/python/issue19995/Lib/unittest/case.py", line 190, in __exit__
     if not expected_regex.search(str(exc_value)):
AttributeError: 'method-wrapper' object has no attribute 'search'

----------------------------------------------------------------------

At worst, I was expecting a difference in the TypeError exception message;  I have no idea why `pi` is being called. 
 From the docs:

---- http://docs.python.org/3/library/unittest.html#unittest.TestCase.assertRaisesRegex ----
assertRaisesRegex(exception, regex, callable, *args, **kwds)

     Like assertRaises() but also tests that regex matches on the string representation
     of the raised exception. regex may be a regular expression object or a string
     containing a regular expression suitable for use by re.search(). Examples:

     self.assertRaisesRegex(ValueError, "invalid literal for.*XYZ'$", int, 'XYZ')
--------------------------------------------------------------------------------------------

Am I correct in thinking this is a bug?

--
~Ethan~


More information about the Python-Dev mailing list