@@ -230,24 +230,27 @@ def set_levels(self, levels, level=None, inplace=False,
230
230
names=[u'foo', u'bar'])
231
231
"""
232
232
233
- if not (level is None or is_list_like (level )):
233
+ level_list_like = level is None or is_list_like (level )
234
+ levels_list_like = (levels != [] and
235
+ is_list_like (levels ) and
236
+ all (is_list_like (x ) for x in levels ))
237
+
238
+ if level_list_like :
239
+ # level is a list-like object of scalars
240
+ levels_error = ("`levels` and `level` are incompatible. "
241
+ "When `level` is list-like, `levels` must be a "
242
+ "list-like object containing list-like objects" )
243
+ if not levels_list_like :
244
+ raise TypeError (levels_error )
245
+ elif not level_list_like :
234
246
# level is a scalar
235
247
levels_error = ("`levels` and `level` are incompatible. "
236
248
"When `level` is a scalar, `levels` must be a "
237
249
" list-like object of scalars." )
238
- if not is_list_like (levels ):
239
- raise TypeError (levels_error )
240
- if any (is_list_like (x ) for x in levels ):
250
+ if levels_list_like :
241
251
raise TypeError (levels_error )
242
252
level = [level ]
243
253
levels = [levels ]
244
- elif level is None or is_list_like (level ):
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 )
251
254
252
255
if inplace :
253
256
idx = self
0 commit comments