# Buggy code
def __init__(self, array, key=None):
    """
    Parameters
    ----------
    array : array_like
        Array like object to index.
    key : tuple, optional
        Array indexer. If provided, it is assumed to already be in
        canonical expanded form.
    """
    # We need to avoid doubly wrapping.
    if isinstance(array, type(self)):
        self.array = array.array
        self.key = array.key
        if key is not None:
            self.key = self._updated_key(key)

    else:
        if key is None:
            key = (slice(None),) * array.ndim
            key = OuterIndexer(key)
        self.array = array
        self.key = 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 __init__(self, array, key=None):
    """
    Parameters
    ----------
    array : array_like
        Array like object to index.
    key : tuple, optional
        Array indexer. If provided, it is assumed to already be in
        canonical expanded form.
    """
    # We need to avoid doubly wrapping.
    if isinstance(array, type(self)):
        self.array = as_indexable(array.array)
        self.key = array.key
        if key is not None:
            self.key = self._updated_key(key)

    else:
        if key is None:
            key = (slice(None),) * array.ndim
            key = BasicIndexer(key)
        self.array = as_indexable(array)
        self.key = key