@@ -229,16 +229,25 @@ def set_levels(self, levels, level=None, inplace=False,
229
229
labels=[[0, 0, 1, 1], [0, 1, 0, 1]],
230
230
names=[u'foo', u'bar'])
231
231
"""
232
- if level is not None and not is_list_like (level ):
232
+
233
+ if not (level is None or is_list_like (level )):
234
+ # level is a scalar
235
+ levels_error = ("`levels` and `level` are incompatible. "
236
+ "When `level` is a scalar, `levels` must be a "
237
+ " list-like object of scalars." )
233
238
if not is_list_like (levels ):
234
- raise TypeError ("Levels must be list-like" )
235
- if is_list_like (levels [ 0 ] ):
236
- raise TypeError ("Levels must be list-like" )
239
+ raise TypeError (levels_error )
240
+ if any ( is_list_like (x ) for x in levels ):
241
+ raise TypeError (levels_error )
237
242
level = [level ]
238
243
levels = [levels ]
239
244
elif level is None or is_list_like (level ):
240
- if not is_list_like (levels ) or not is_list_like (levels [0 ]):
241
- raise TypeError ("Levels must be list of lists-like" )
245
+ # level is a sequence of scalars
246
+ levels_error = ("`levels` and `level` are incompatible. "
247
+ "When `level` is list-like, `levels` must be a "
248
+ "list-like object containing list-like objects" )
249
+ if not (is_list_like (levels ) and all (is_list_like (x ) for x in levels )):
250
+ raise TypeError (levels_error )
242
251
243
252
if inplace :
244
253
idx = self
0 commit comments