@@ -2792,15 +2792,19 @@ def _partial_tup_index(self, tup: tuple, side="left"):
2792
2792
n = len (tup )
2793
2793
start , end = 0 , len (self )
2794
2794
zipped = zip (tup , self .levels , self .codes )
2795
- for k , (lab , lev , labs ) in enumerate (zipped ):
2796
- section = labs [start :end ]
2795
+ for k , (lab , lev , level_codes ) in enumerate (zipped ):
2796
+ section = level_codes [start :end ]
2797
2797
2798
2798
if lab not in lev and not isna (lab ):
2799
- if not lev .is_type_compatible (lib .infer_dtype ([lab ], skipna = False )):
2800
- raise TypeError (f"Level type mismatch: { lab } " )
2801
-
2802
2799
# short circuit
2803
- loc = lev .searchsorted (lab , side = side )
2800
+ try :
2801
+ loc = lev .searchsorted (lab , side = side )
2802
+ except TypeError as err :
2803
+ # non-comparable e.g. test_slice_locs_with_type_mismatch
2804
+ raise TypeError (f"Level type mismatch: { lab } " ) from err
2805
+ if not is_integer (loc ):
2806
+ # non-comparable level, e.g. test_groupby_example
2807
+ raise TypeError (f"Level type mismatch: { lab } " )
2804
2808
if side == "right" and loc >= 0 :
2805
2809
loc -= 1
2806
2810
return start + section .searchsorted (loc , side = side )
0 commit comments