# Buggy code
def _updated_key(self, new_key):
    # TODO should suport VectorizedIndexer
    if isinstance(new_key, VectorizedIndexer):
        raise NotImplementedError(
            "Vectorized indexing for {} is not implemented. Load your "
            "data first with .load() or .compute().".format(type(self))
        )
    new_key = iter(expanded_indexer(new_key, self.ndim))
    key = []
    for size, k in zip(self.array.shape, self.key):
        if isinstance(k, integer_types):
            key.append(k)
        else:
            key.append(_index_indexer_1d(k, next(new_key), size))
    return OuterIndexer(key)


# Traceback (ValueError)
import numpy as np
import xarray as xr

a = np.random.randn(4, 3)
a[1, 1] = np.NaN
da = xr.DataArray(a, dims=('y', 'x'), coords={'y':np.arange(4), 'x':np.arange(3)})
da.to_netcdf('test.nc')

with xr.open_dataarray('test.nc') as da:
da.dropna(dim='x', how='any')

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-37-8d137cf3a813> in <module>()
8
9 with xr.open_dataarray('test.nc') as da:
---> 10     da.dropna(dim='x', how='any')

~/.pyvirtualenvs/py3/lib/python3.5/site-packages/xarray/core/dataarray.py in dropna(self, dim, how, thresh)
1158         DataArray
1159         """
-> 1160         ds = self._to_temp_dataset().dropna(dim, how=how, thresh=thresh)
1161         return self._from_temp_dataset(ds)
1162

~/.pyvirtualenvs/py3/lib/python3.5/site-packages/xarray/core/dataset.py in dropna(self, dim, how, thresh, subset)
2292             raise TypeError('must specify how or thresh')
2293
-> 2294         return self.isel(**{dim: mask})
2295
2296     def fillna(self, value):

~/.pyvirtualenvs/py3/lib/python3.5/site-packages/xarray/core/dataset.py in isel(self, drop, **indexers)
1291         coord_names = set(variables).intersection(self._coord_names)
1292         selected = self._replace_vars_and_dims(variables,
-> 1293                                                coord_names=coord_names)
1294
1295         # Extract coordinates from indexers

~/.pyvirtualenvs/py3/lib/python3.5/site-packages/xarray/core/dataset.py in _replace_vars_and_dims(self, variables, coord_names, dims, attrs, inplace)
598         """
599         if dims is None:
--> 600             dims = calculate_dimensions(variables)
601         if inplace:
602             self._dims = dims

~/.pyvirtualenvs/py3/lib/python3.5/site-packages/xarray/core/dataset.py in calculate_dimensions(variables)
111                 raise ValueError('conflicting sizes for dimension %r: '
112                                  'length %s on %r and length %s on %r' %
--> 113                                  (dim, size, k, dims[dim], last_used[dim]))
114     return dims
115

ValueError: conflicting sizes for dimension 'y': length 2 on <this-array> and length 4 on 'y'

# Fixed code
def _updated_key(self, new_key):
    # TODO should suport VectorizedIndexer
    if isinstance(new_key, VectorizedIndexer):
        raise NotImplementedError(
            "Vectorized indexing for {} is not implemented. Load your "
            "data first with .load() or .compute().".format(type(self))
        )
    new_key = iter(expanded_indexer(new_key, self.ndim))
    key = []
    for size, k in zip(self.array.shape, self.key):
        if isinstance(k, integer_types):
            key.append(k)
        else:
            key.append(_index_indexer_1d(k, next(new_key), size))
    if all(isinstance(k, integer_types + (slice,)) for k in key):
        return BasicIndexer(key)
    return OuterIndexer(key)