@@ -109,7 +109,7 @@ def __new__(cls, data, dtype=None, copy=False, name=None, **kwargs):
109
109
110
110
subarr = com ._asarray_tuplesafe (data , dtype = object )
111
111
elif np .isscalar (data ):
112
- raise ValueError ('Index(...) must be called with a collection '
112
+ raise TypeError ('Index(...) must be called with a collection '
113
113
'of some kind, %s was passed' % repr (data ))
114
114
else :
115
115
# other iterable of some kind
@@ -201,7 +201,7 @@ def _get_names(self):
201
201
202
202
def _set_names (self , values ):
203
203
if len (values ) != 1 :
204
- raise AssertionError ('Length of new names must be 1, got %d'
204
+ raise ValueError ('Length of new names must be 1, got %d'
205
205
% len (values ))
206
206
self .name = values [0 ]
207
207
@@ -327,7 +327,7 @@ def __hash__(self):
327
327
return hash (self .view (np .ndarray ))
328
328
329
329
def __setitem__ (self , key , value ):
330
- raise Exception (str (self .__class__ ) + ' object is immutable ' )
330
+ raise TypeError (str (self .__class__ ) + ' does not support item assignment ' )
331
331
332
332
def __getitem__ (self , key ):
333
333
"""Override numpy.ndarray's __getitem__ method to work as desired"""
@@ -513,7 +513,7 @@ def order(self, return_indexer=False, ascending=True):
513
513
return sorted_index
514
514
515
515
def sort (self , * args , ** kwargs ):
516
- raise Exception ('Cannot sort an Index object' )
516
+ raise TypeError ('Cannot sort an %r object' % self . __class__ . __name__ )
517
517
518
518
def shift (self , periods = 1 , freq = None ):
519
519
"""
@@ -572,7 +572,7 @@ def union(self, other):
572
572
union : Index
573
573
"""
574
574
if not hasattr (other , '__iter__' ):
575
- raise Exception ('Input must be iterable! ' )
575
+ raise TypeError ('Input must be iterable. ' )
576
576
577
577
if len (other ) == 0 or self .equals (other ):
578
578
return self
@@ -637,7 +637,7 @@ def intersection(self, other):
637
637
intersection : Index
638
638
"""
639
639
if not hasattr (other , '__iter__' ):
640
- raise Exception ('Input must be iterable!' )
640
+ raise TypeError ('Input must be iterable!' )
641
641
642
642
self ._assert_can_do_setop (other )
643
643
@@ -679,7 +679,7 @@ def diff(self, other):
679
679
"""
680
680
681
681
if not hasattr (other , '__iter__' ):
682
- raise Exception ('Input must be iterable!' )
682
+ raise TypeError ('Input must be iterable!' )
683
683
684
684
if self .equals (other ):
685
685
return Index ([], name = self .name )
@@ -807,7 +807,7 @@ def get_indexer(self, target, method=None, limit=None):
807
807
return this .get_indexer (target , method = method , limit = limit )
808
808
809
809
if not self .is_unique :
810
- raise Exception ('Reindexing only valid with uniquely valued Index '
810
+ raise InvalidIndexError ('Reindexing only valid with uniquely valued Index '
811
811
'objects' )
812
812
813
813
if method == 'pad' :
@@ -900,7 +900,7 @@ def reindex(self, target, method=None, level=None, limit=None,
900
900
target = _ensure_index (target )
901
901
if level is not None :
902
902
if method is not None :
903
- raise ValueError ('Fill method not supported if level passed' )
903
+ raise TypeError ('Fill method not supported if level passed' )
904
904
_ , indexer , _ = self ._join_level (target , level , how = 'right' ,
905
905
return_indexers = True )
906
906
else :
@@ -1055,7 +1055,7 @@ def _join_level(self, other, level, how='left', return_indexers=False):
1055
1055
the MultiIndex will not be changed (currently)
1056
1056
"""
1057
1057
if isinstance (self , MultiIndex ) and isinstance (other , MultiIndex ):
1058
- raise Exception ('Join on level between two MultiIndex objects '
1058
+ raise TypeError ('Join on level between two MultiIndex objects '
1059
1059
'is ambiguous' )
1060
1060
1061
1061
left , right = self , other
@@ -1429,11 +1429,10 @@ class MultiIndex(Index):
1429
1429
1430
1430
def __new__ (cls , levels = None , labels = None , sortorder = None , names = None ):
1431
1431
if len (levels ) != len (labels ):
1432
- raise AssertionError (
1432
+ raise ValueError (
1433
1433
'Length of levels and labels must be the same' )
1434
1434
if len (levels ) == 0 :
1435
- raise Exception ('Must pass non-zero number of levels/labels' )
1436
-
1435
+ raise TypeError ('Must pass non-zero number of levels/labels' )
1437
1436
if len (levels ) == 1 :
1438
1437
if names :
1439
1438
name = names [0 ]
@@ -1534,17 +1533,17 @@ def _get_level_number(self, level):
1534
1533
try :
1535
1534
count = self .names .count (level )
1536
1535
if count > 1 :
1537
- raise Exception ('The name %s occurs multiple times, use a '
1536
+ raise ValueError ('The name %s occurs multiple times, use a '
1538
1537
'level number' % level )
1539
1538
level = self .names .index (level )
1540
1539
except ValueError :
1541
1540
if not isinstance (level , int ):
1542
- raise Exception ('Level %s not found' % str (level ))
1541
+ raise KeyError ('Level %s not found' % str (level ))
1543
1542
elif level < 0 :
1544
1543
level += self .nlevels
1545
1544
# Note: levels are zero-based
1546
1545
elif level >= self .nlevels :
1547
- raise ValueError ( ' Index has only %d levels, not %d'
1546
+ raise IndexError ( 'Too many levels: Index has only %d levels, not %d'
1548
1547
% (self .nlevels , level + 1 ))
1549
1548
return level
1550
1549
@@ -1790,7 +1789,8 @@ def from_tuples(cls, tuples, sortorder=None, names=None):
1790
1789
index : MultiIndex
1791
1790
"""
1792
1791
if len (tuples ) == 0 :
1793
- raise Exception ('Cannot infer number of levels from empty list' )
1792
+ # I think this is right? Not quite sure...
1793
+ raise TypeError ('Cannot infer number of levels from empty list' )
1794
1794
1795
1795
if isinstance (tuples , np .ndarray ):
1796
1796
if isinstance (tuples , Index ):
@@ -2158,7 +2158,8 @@ def reindex(self, target, method=None, level=None, limit=None,
2158
2158
"""
2159
2159
if level is not None :
2160
2160
if method is not None :
2161
- raise ValueError ('Fill method not supported if level passed' )
2161
+ # FIXME: Should this actually be a TypeError [given that it's a signature issue] or ValueError
2162
+ raise TypeError ('Fill method not supported if level passed' )
2162
2163
target , indexer , _ = self ._join_level (target , level , how = 'right' ,
2163
2164
return_indexers = True )
2164
2165
else :
@@ -2202,7 +2203,7 @@ def _tuple_index(self):
2202
2203
def slice_locs (self , start = None , end = None , strict = False ):
2203
2204
"""
2204
2205
For an ordered MultiIndex, compute the slice locations for input
2205
- labels. They can tuples representing partial levels, e.g. for a
2206
+ labels. They can be tuples representing partial levels, e.g. for a
2206
2207
MultiIndex with 3 levels, you can pass a single value (corresponding to
2207
2208
the first level), or a 1-, 2-, or 3-tuple.
2208
2209
@@ -2240,8 +2241,9 @@ def slice_locs(self, start=None, end=None, strict=False):
2240
2241
2241
2242
def _partial_tup_index (self , tup , side = 'left' ):
2242
2243
if len (tup ) > self .lexsort_depth :
2243
- raise KeyError ('MultiIndex lexsort depth %d, key was length %d' %
2244
- (self .lexsort_depth , len (tup )))
2244
+ raise KeyError ('Key length (%d) was greater than MultiIndex'
2245
+ ' lexsort depth (%d)' %
2246
+ (len (tup ), self .lexsort_depth ))
2245
2247
2246
2248
n = len (tup )
2247
2249
start , end = 0 , len (self )
@@ -2251,7 +2253,7 @@ def _partial_tup_index(self, tup, side='left'):
2251
2253
2252
2254
if lab not in lev :
2253
2255
if not lev .is_type_compatible (lib .infer_dtype ([lab ])):
2254
- raise Exception ('Level type mismatch: %s' % lab )
2256
+ raise TypeError ('Level type mismatch: %s' % lab )
2255
2257
2256
2258
# short circuit
2257
2259
loc = lev .searchsorted (lab , side = side )
@@ -2546,7 +2548,7 @@ def diff(self, other):
2546
2548
try :
2547
2549
other = MultiIndex .from_tuples (other )
2548
2550
except :
2549
- raise TypeError ("other should be a MultiIndex or a list of tuples" )
2551
+ raise TypeError ("other must be a MultiIndex or a list of tuples" )
2550
2552
result_names = self .names
2551
2553
else :
2552
2554
result_names = self .names if self .names == other .names else None
@@ -2588,7 +2590,7 @@ def insert(self, loc, item):
2588
2590
if not isinstance (item , tuple ):
2589
2591
item = (item ,) + ('' ,) * (self .nlevels - 1 )
2590
2592
elif len (item ) != self .nlevels :
2591
- raise ValueError ('Passed item incompatible tuple length' )
2593
+ raise ValueError ('Item must have length equal to number of levels. ' )
2592
2594
2593
2595
new_levels = []
2594
2596
new_labels = []
@@ -2691,7 +2693,7 @@ def _ensure_index(index_like):
2691
2693
2692
2694
def _validate_join_method (method ):
2693
2695
if method not in ['left' , 'right' , 'inner' , 'outer' ]:
2694
- raise Exception ('do not recognize join method %s' % method )
2696
+ raise ValueError ('do not recognize join method %s' % method )
2695
2697
2696
2698
2697
2699
# TODO: handle index names!
0 commit comments