]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue 3287: Raise correct exception for float inputs.
authorRaymond Hettinger <python@rcn.com>
Thu, 10 Jul 2008 09:31:08 +0000 (09:31 +0000)
committerRaymond Hettinger <python@rcn.com>
Thu, 10 Jul 2008 09:31:08 +0000 (09:31 +0000)
Lib/fractions.py
Lib/test/test_fractions.py

index 3dc818477a781e763f4b412cb876caae52eec753..944e1fcfe88a52efc1950c58133c8c86d5953036 100755 (executable)
@@ -96,9 +96,11 @@ class Fraction(Rational):
 
         if denominator == 0:
             raise ZeroDivisionError('Fraction(%s, 0)' % numerator)
-
-        numerator = numerator.__index__()
-        denominator = denominator.__index__()
+        try:
+            numerator = numerator.__index__()
+            denominator = denominator.__index__()
+        except AttributeError:
+            raise TypeError('Numerator and denominator must support __index__.')
         g = gcd(numerator, denominator)
         self._numerator = numerator // g
         self._denominator = denominator // g
index f2d71419893e5d9ea52a0a385d93cb21f98b362e..d61294fe48dab09e140a46e03156a4fc8ff46725 100644 (file)
@@ -62,11 +62,11 @@ class FractionTest(unittest.TestCase):
 
         self.assertRaisesMessage(ZeroDivisionError, "Fraction(12, 0)",
                                  F, 12, 0)
-        self.assertRaises(AttributeError, F, 1.5)
-        self.assertRaises(AttributeError, F, 1.5 + 3j)
+        self.assertRaises(TypeError, F, 1.5)
+        self.assertRaises(TypeError, F, 1.5 + 3j)
 
-        self.assertRaises(AttributeError, F, F(1, 2), 3)
-        self.assertRaises(AttributeError, F, "3/2", 3)
+        self.assertRaises(TypeError, F, F(1, 2), 3)
+        self.assertRaises(TypeError, F, "3/2", 3)
 
     def testFromString(self):
         self.assertEquals((5, 1), _components(F("5")))