@@ -1266,6 +1266,20 @@ def __repr__(self):
12661266 self .assertRaises (ValueError , ("{" + big + "}" ).format )
12671267 self .assertRaises (ValueError , ("{[" + big + "]}" ).format , [0 ])
12681268
1269+ # test number formatter errors:
1270+ self .assertRaises (ValueError , '{0:x}' .format , 1j )
1271+ self .assertRaises (ValueError , '{0:x}' .format , 1.0 )
1272+ self .assertRaises (ValueError , '{0:X}' .format , 1j )
1273+ self .assertRaises (ValueError , '{0:X}' .format , 1.0 )
1274+ self .assertRaises (ValueError , '{0:o}' .format , 1j )
1275+ self .assertRaises (ValueError , '{0:o}' .format , 1.0 )
1276+ self .assertRaises (ValueError , '{0:u}' .format , 1j )
1277+ self .assertRaises (ValueError , '{0:u}' .format , 1.0 )
1278+ self .assertRaises (ValueError , '{0:i}' .format , 1j )
1279+ self .assertRaises (ValueError , '{0:i}' .format , 1.0 )
1280+ self .assertRaises (ValueError , '{0:d}' .format , 1j )
1281+ self .assertRaises (ValueError , '{0:d}' .format , 1.0 )
1282+
12691283 # issue 6089
12701284 self .assertRaises (ValueError , "{0[0]x}" .format , [None ])
12711285 self .assertRaises (ValueError , "{0[0](10)}" .format , [None ])
@@ -1501,11 +1515,31 @@ def __int__(self):
15011515 self .assertEqual ('%X' % letter_m , '6D' )
15021516 self .assertEqual ('%o' % letter_m , '155' )
15031517 self .assertEqual ('%c' % letter_m , 'm' )
1504- self .assertRaisesRegex (TypeError , '%x format: an integer is required, not float' , operator .mod , '%x' , 3.14 ),
1505- self .assertRaisesRegex (TypeError , '%X format: an integer is required, not float' , operator .mod , '%X' , 2.11 ),
1506- self .assertRaisesRegex (TypeError , '%o format: an integer is required, not float' , operator .mod , '%o' , 1.79 ),
1507- self .assertRaisesRegex (TypeError , '%x format: an integer is required, not PseudoFloat' , operator .mod , '%x' , pi ),
1508- self .assertRaises (TypeError , operator .mod , '%c' , pi ),
1518+ self .assertRaisesRegex (TypeError , '%x format: an integer is required, not float' , operator .mod , '%x' , 3.14 )
1519+ self .assertRaisesRegex (TypeError , '%X format: an integer is required, not float' , operator .mod , '%X' , 2.11 )
1520+ self .assertRaisesRegex (TypeError , '%o format: an integer is required, not float' , operator .mod , '%o' , 1.79 )
1521+ self .assertRaisesRegex (TypeError , '%x format: an integer is required, not PseudoFloat' , operator .mod , '%x' , pi )
1522+ self .assertRaisesRegex (TypeError , '%x format: an integer is required, not complex' , operator .mod , '%x' , 3j )
1523+ self .assertRaisesRegex (TypeError , '%X format: an integer is required, not complex' , operator .mod , '%X' , 2j )
1524+ self .assertRaisesRegex (TypeError , '%o format: an integer is required, not complex' , operator .mod , '%o' , 1j )
1525+ self .assertRaisesRegex (TypeError , '%u format: a real number is required, not complex' , operator .mod , '%u' , 3j )
1526+ self .assertRaisesRegex (TypeError , '%i format: a real number is required, not complex' , operator .mod , '%i' , 2j )
1527+ self .assertRaisesRegex (TypeError , '%d format: a real number is required, not complex' , operator .mod , '%d' , 1j )
1528+ self .assertRaisesRegex (TypeError , '%c requires int or char' , operator .mod , '%c' , pi )
1529+
1530+ class RaisingNumber :
1531+ def __int__ (self ):
1532+ raise RuntimeError ('int' ) # should not be `TypeError`
1533+ def __index__ (self ):
1534+ raise RuntimeError ('index' ) # should not be `TypeError`
1535+
1536+ rn = RaisingNumber ()
1537+ self .assertRaisesRegex (RuntimeError , 'int' , operator .mod , '%d' , rn )
1538+ self .assertRaisesRegex (RuntimeError , 'int' , operator .mod , '%i' , rn )
1539+ self .assertRaisesRegex (RuntimeError , 'int' , operator .mod , '%u' , rn )
1540+ self .assertRaisesRegex (RuntimeError , 'index' , operator .mod , '%x' , rn )
1541+ self .assertRaisesRegex (RuntimeError , 'index' , operator .mod , '%X' , rn )
1542+ self .assertRaisesRegex (RuntimeError , 'index' , operator .mod , '%o' , rn )
15091543
15101544 def test_formatting_with_enum (self ):
15111545 # issue18780
0 commit comments