Skip to content

Commit 9a33d19

Browse files
authored
Merge pull request #385 from jparise/newrange-index
newrange: handle non-numbers passed to index()
2 parents 3c44a1e + 2e50b21 commit 9a33d19

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

src/future/types/newrange.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,10 @@ def __len__(self):
9090
def index(self, value):
9191
"""Return the 0-based position of integer `value` in
9292
the sequence this range represents."""
93-
diff = value - self._start
93+
try:
94+
diff = value - self._start
95+
except TypeError:
96+
raise ValueError('%r is not in range' % value)
9497
quotient, remainder = divmod(diff, self._step)
9598
if remainder == 0 and 0 <= quotient < self._len:
9699
return abs(quotient)

tests/test_future/test_range.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ def test_equality_range(self):
2626
self.assertEqual(range(0), range(1, 1))
2727
self.assertEqual(range(0, 10, 3), range(0, 11, 3))
2828

29+
def test_contains(self):
30+
self.assertIn(1, range(2))
31+
self.assertNotIn(10, range(2))
32+
self.assertNotIn(None, range(2))
33+
self.assertNotIn("", range(2))
34+
2935
# Use strict equality of attributes when slicing to catch subtle differences
3036
def assertRangesEqual(self, r1, r2):
3137
by_attrs = attrgetter('start', 'stop', 'step')

0 commit comments

Comments
 (0)