[Python-checkins] r74718 - in python/branches/release26-maint: Lib/decimal.py Lib/test/test_decimal.py Misc/NEWS

mark.dickinson python-checkins at python.org
Tue Sep 8 21:22:18 CEST 2009


Author: mark.dickinson
Date: Tue Sep  8 21:22:18 2009
New Revision: 74718

Log:
Merged revisions 74708 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r74708 | mark.dickinson | 2009-09-07 19:04:58 +0100 (Mon, 07 Sep 2009) | 2 lines
  
  #Issue 6795:  Fix infinite recursion in long(Decimal('nan'));  change int(Decimal('nan')) to raise ValueError instead of either returning NaN or raising InvalidContext.
........


Modified:
   python/branches/release26-maint/   (props changed)
   python/branches/release26-maint/Lib/decimal.py
   python/branches/release26-maint/Lib/test/test_decimal.py
   python/branches/release26-maint/Misc/NEWS

Modified: python/branches/release26-maint/Lib/decimal.py
==============================================================================
--- python/branches/release26-maint/Lib/decimal.py	(original)
+++ python/branches/release26-maint/Lib/decimal.py	Tue Sep  8 21:22:18 2009
@@ -1512,10 +1512,9 @@
         """Converts self to an int, truncating if necessary."""
         if self._is_special:
             if self._isnan():
-                context = getcontext()
-                return context._raise_error(InvalidContext)
+                raise ValueError("Cannot convert NaN to integer")
             elif self._isinfinity():
-                raise OverflowError("Cannot convert infinity to int")
+                raise OverflowError("Cannot convert infinity to integer")
         s = (-1)**self._sign
         if self._exp >= 0:
             return s*int(self._int)*10**self._exp

Modified: python/branches/release26-maint/Lib/test/test_decimal.py
==============================================================================
--- python/branches/release26-maint/Lib/test/test_decimal.py	(original)
+++ python/branches/release26-maint/Lib/test/test_decimal.py	Tue Sep  8 21:22:18 2009
@@ -1372,6 +1372,16 @@
             r = d.to_integral(ROUND_DOWN)
             self.assertEqual(Decimal(int(d)), r)
 
+        self.assertRaises(ValueError, int, Decimal('-nan'))
+        self.assertRaises(ValueError, int, Decimal('snan'))
+        self.assertRaises(OverflowError, int, Decimal('inf'))
+        self.assertRaises(OverflowError, int, Decimal('-inf'))
+
+        self.assertRaises(ValueError, long, Decimal('-nan'))
+        self.assertRaises(ValueError, long, Decimal('snan'))
+        self.assertRaises(OverflowError, long, Decimal('inf'))
+        self.assertRaises(OverflowError, long, Decimal('-inf'))
+
     def test_trunc(self):
         for x in range(-250, 250):
             s = '%0.2f' % (x / 100.0)

Modified: python/branches/release26-maint/Misc/NEWS
==============================================================================
--- python/branches/release26-maint/Misc/NEWS	(original)
+++ python/branches/release26-maint/Misc/NEWS	Tue Sep  8 21:22:18 2009
@@ -74,6 +74,10 @@
 Library
 -------
 
+- Issue #6795: int(Decimal('nan')) now raises ValueError instead of
+  returning NaN or raising InvalidContext.  Also, fix infinite recursion
+  in long(Decimal('nan')).
+
 - Issue #6850: Fix bug in Decimal._parse_format_specifier for formats
   with no type specifier.
 


More information about the Python-checkins mailing list