]> granicus.if.org Git - python/commitdiff
Merged revisions 74709 via svnmerge from
authorMark Dickinson <dickinsm@gmail.com>
Tue, 8 Sep 2009 19:23:44 +0000 (19:23 +0000)
committerMark Dickinson <dickinsm@gmail.com>
Tue, 8 Sep 2009 19:23:44 +0000 (19:23 +0000)
svn+ssh://pythondev@www.python.org/python/branches/py3k

................
  r74709 | mark.dickinson | 2009-09-07 19:08:12 +0100 (Mon, 07 Sep 2009) | 9 lines

  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.
  ........
................

Lib/decimal.py
Lib/test/test_decimal.py
Misc/NEWS

index e3af3f0812befa06302d693fd32c8a995adcdc36..e3fa8cb84fa21ecc21d34bd69447866303b14a7c 100644 (file)
@@ -1553,10 +1553,9 @@ class Decimal(object):
         """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
index f0c44315bdb731a206c1c383248dcc2d1a8434dd..e3e50f070761a2c4fc396aaee5385e19b6c794c3 100644 (file)
@@ -1543,6 +1543,11 @@ class DecimalPythonAPItests(unittest.TestCase):
             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'))
+
     def test_trunc(self):
         for x in range(-250, 250):
             s = '%0.2f' % (x / 100.0)
index 3a9b0b9c14e4705d070306e1b80e289e7ce6da86..31a8e0ed32a560cdf8108090604acd756436108c 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -52,6 +52,10 @@ C-API
 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.