# Buggy code
def _get_with(self, key):
    # other: fancy integer or otherwise
    if isinstance(key, slice):
        from pandas.core.indexing import _is_index_slice

        if self.index.inferred_type == "integer" or _is_index_slice(key):
            indexer = key
        else:
            indexer = self.ix._convert_to_indexer(key, axis=0)
        return self._get_values(indexer)
    else:
        if isinstance(key, tuple):
            return self._get_values_tuple(key)

        if not isinstance(key, (list, np.ndarray)):  # pragma: no cover
            key = list(key)

        key_type = lib.infer_dtype(key)

        if key_type == "integer":
            if self.index.inferred_type == "integer":
                return self.reindex(key)
            else:
                return self._get_values(key)
        elif key_type == "boolean":
            return self._get_values(key)
        else:
            try:
                return self.reindex(key)
            except Exception:
                # [slice(0, 5, None)] will break if you convert to ndarray,
                # e.g. as requested by np.median
                # hack
                if isinstance(key[0], slice):
                    return self._get_values(key)
                raise


# Traceback (ValueError)
In [13]: s = Series(np.arange(10))

In [14]: np.diff(s)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/home/wesm/code/pandas/<ipython-input-14-b5f9fe77ab7c> in <module>()
----> 1 np.diff(s)

/usr/lib/epd-7.1/lib/python2.7/site-packages/numpy/lib/function_base.pyc in diff(a, n, axis)
975         return diff(a[slice1]-a[slice2], n-1, axis=axis)
976     else:
--> 977         return a[slice1]-a[slice2]
978
979 def interp(x, xp, fp, left=None, right=None):

/home/wesm/code/pandas/pandas/core/series.pyc in __getitem__(self, key)
392             key = np.asarray(key, dtype=bool)
393
--> 394         return self._get_with(key)
395
396     def _get_with(self, key):

/home/wesm/code/pandas/pandas/core/series.pyc in _get_with(self, key)
406         else:
407             if isinstance(key, tuple):
--> 408                 return self._get_values_tuple(key)
409
410             if not isinstance(key, (list, np.ndarray)):  # pragma: no cover

/home/wesm/code/pandas/pandas/core/series.pyc in _get_values_tuple(self, key)
437
438         if not isinstance(self.index, MultiIndex):
--> 439             raise ValueError('Can only tuple-index with a MultiIndex')
440
441         # If key is contained, would have returned by now

ValueError: Can only tuple-index with a MultiIndex

# Fixed code
def _get_with(self, key):
    # other: fancy integer or otherwise
    if isinstance(key, slice):
        from pandas.core.indexing import _is_index_slice

        if self.index.inferred_type == "integer" or _is_index_slice(key):
            indexer = key
        else:
            indexer = self.ix._convert_to_indexer(key, axis=0)
        return self._get_values(indexer)
    else:
        if isinstance(key, tuple):
            try:
                return self._get_values_tuple(key)
            except:
                if len(key) == 1:
                    key = key[0]
                    if isinstance(key, slice):
                        return self._get_values(key)
                raise

        if not isinstance(key, (list, np.ndarray)):  # pragma: no cover
            key = list(key)

        key_type = lib.infer_dtype(key)

        if key_type == "integer":
            if self.index.inferred_type == "integer":
                return self.reindex(key)
            else:
                return self._get_values(key)
        elif key_type == "boolean":
            return self._get_values(key)
        else:
            try:
                return self.reindex(key)
            except Exception:
                # [slice(0, 5, None)] will break if you convert to ndarray,
                # e.g. as requested by np.median
                # hack
                if isinstance(key[0], slice):
                    return self._get_values(key)
                raise