@@ -1306,6 +1306,20 @@ def __repr__(self):
13061306 self .assertRaises (ValueError , ("{" + big + "}" ).format )
13071307 self .assertRaises (ValueError , ("{[" + big + "]}" ).format , [0 ])
13081308
1309+ # test number formatter errors:
1310+ self .assertRaises (ValueError , '{0:x}' .format , 1j )
1311+ self .assertRaises (ValueError , '{0:x}' .format , 1.0 )
1312+ self .assertRaises (ValueError , '{0:X}' .format , 1j )
1313+ self .assertRaises (ValueError , '{0:X}' .format , 1.0 )
1314+ self .assertRaises (ValueError , '{0:o}' .format , 1j )
1315+ self .assertRaises (ValueError , '{0:o}' .format , 1.0 )
1316+ self .assertRaises (ValueError , '{0:u}' .format , 1j )
1317+ self .assertRaises (ValueError , '{0:u}' .format , 1.0 )
1318+ self .assertRaises (ValueError , '{0:i}' .format , 1j )
1319+ self .assertRaises (ValueError , '{0:i}' .format , 1.0 )
1320+ self .assertRaises (ValueError , '{0:d}' .format , 1j )
1321+ self .assertRaises (ValueError , '{0:d}' .format , 1.0 )
1322+
13091323 # issue 6089
13101324 self .assertRaises (ValueError , "{0[0]x}" .format , [None ])
13111325 self .assertRaises (ValueError , "{0[0](10)}" .format , [None ])
@@ -1541,11 +1555,31 @@ def __int__(self):
15411555 self .assertEqual ('%X' % letter_m , '6D' )
15421556 self .assertEqual ('%o' % letter_m , '155' )
15431557 self .assertEqual ('%c' % letter_m , 'm' )
1544- self .assertRaisesRegex (TypeError , '%x format: an integer is required, not float' , operator .mod , '%x' , 3.14 ),
1545- self .assertRaisesRegex (TypeError , '%X format: an integer is required, not float' , operator .mod , '%X' , 2.11 ),
1546- self .assertRaisesRegex (TypeError , '%o format: an integer is required, not float' , operator .mod , '%o' , 1.79 ),
1547- self .assertRaisesRegex (TypeError , '%x format: an integer is required, not PseudoFloat' , operator .mod , '%x' , pi ),
1548- self .assertRaises (TypeError , operator .mod , '%c' , pi ),
1558+ self .assertRaisesRegex (TypeError , '%x format: an integer is required, not float' , operator .mod , '%x' , 3.14 )
1559+ self .assertRaisesRegex (TypeError , '%X format: an integer is required, not float' , operator .mod , '%X' , 2.11 )
1560+ self .assertRaisesRegex (TypeError , '%o format: an integer is required, not float' , operator .mod , '%o' , 1.79 )
1561+ self .assertRaisesRegex (TypeError , '%x format: an integer is required, not PseudoFloat' , operator .mod , '%x' , pi )
1562+ self .assertRaisesRegex (TypeError , '%x format: an integer is required, not complex' , operator .mod , '%x' , 3j )
1563+ self .assertRaisesRegex (TypeError , '%X format: an integer is required, not complex' , operator .mod , '%X' , 2j )
1564+ self .assertRaisesRegex (TypeError , '%o format: an integer is required, not complex' , operator .mod , '%o' , 1j )
1565+ self .assertRaisesRegex (TypeError , '%u format: a real number is required, not complex' , operator .mod , '%u' , 3j )
1566+ self .assertRaisesRegex (TypeError , '%i format: a real number is required, not complex' , operator .mod , '%i' , 2j )
1567+ self .assertRaisesRegex (TypeError , '%d format: a real number is required, not complex' , operator .mod , '%d' , 1j )
1568+ self .assertRaisesRegex (TypeError , '%c requires int or char' , operator .mod , '%c' , pi )
1569+
1570+ class RaisingNumber :
1571+ def __int__ (self ):
1572+ raise RuntimeError ('int' ) # should not be `TypeError`
1573+ def __index__ (self ):
1574+ raise RuntimeError ('index' ) # should not be `TypeError`
1575+
1576+ rn = RaisingNumber ()
1577+ self .assertRaisesRegex (RuntimeError , 'int' , operator .mod , '%d' , rn )
1578+ self .assertRaisesRegex (RuntimeError , 'int' , operator .mod , '%i' , rn )
1579+ self .assertRaisesRegex (RuntimeError , 'int' , operator .mod , '%u' , rn )
1580+ self .assertRaisesRegex (RuntimeError , 'index' , operator .mod , '%x' , rn )
1581+ self .assertRaisesRegex (RuntimeError , 'index' , operator .mod , '%X' , rn )
1582+ self .assertRaisesRegex (RuntimeError , 'index' , operator .mod , '%o' , rn )
15491583
15501584 def test_formatting_with_enum (self ):
15511585 # issue18780
0 commit comments