[Python-Dev] unittest assertRaisesRegex bug?

Ethan Furman ethan at stoneleaf.us
Thu Mar 20 00:13:01 CET 2014


On 03/19/2014 03:57 PM, Antoine Pitrou wrote:
> On Wed, 19 Mar 2014 15:17:53 -0700
> Ethan Furman <ethan at stoneleaf.us> wrote:
>> On 03/19/2014 03:13 PM, Antoine Pitrou wrote:
>>> On Wed, 19 Mar 2014 14:37:42 -0700
>>> Ethan Furman <ethan at stoneleaf.us> wrote:
>>>> 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),
>>>
>>> This is certainly not the code you are showing above.
>>
>> More words, please!  :)
>
> I mean the line shown just above in the traceback does not match the
> code you presented at the top, and that line clearly has a missing
> regex pattern.

A regex pattern can be a literal, yes?  In which case

exception -> TypeError
regex -> '%x format: an integer is required, not PsuedoFloat'
callable -> '%x'.__mod__
*args -> pi
**kwargs -> None

So, unless you can point to where I've gone wrong with the above (which is why I posted in the first place), I think we 
have a bug in unittest.

Also:

         self.assertRaisesRegex(TypeError, '%x format: an integer is required, not float','%x'.__mod__, 3.14),
         self.assertRaisesRegex(TypeError, '%X format: an integer is required, not float','%X'.__mod__, 2.11),
         self.assertRaisesRegex(TypeError, '%o format: an integer is required, not float','%o'.__mod__, 1.79),

these lines all work just fine.

--
~Ethan~


More information about the Python-Dev mailing list