From 53b1eca3429a7f6cc67185a4757b2975bda4813a Mon Sep 17 00:00:00 2001 From: Qiang Luo Date: Sat, 24 Oct 2020 18:55:26 +0800 Subject: [PATCH] fix KeyError when append_dim is not None in to_zarr for empty datastore This bug is introduced in commit 1c5adc9fba6dcde73f31282719d3d8614e54f59b This should fix issue #4261 --- xarray/backends/zarr.py | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index b54be09e749..d483f05b582 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -499,22 +499,22 @@ def set_variables(self, variables, check_encoding_set, writer, unlimited_dims=No if v.encoding == {"_FillValue": None} and fill_value is None: v.encoding = {} - if self.append_dim is not None and self.append_dim in dims: - # resize existing variable + if name in self.ds: zarr_array = self.ds[name] - append_axis = dims.index(self.append_dim) - - new_region = [slice(None)] * len(dims) - new_region[append_axis] = slice(zarr_array.shape[append_axis], None) - region = tuple(new_region) - - new_shape = list(zarr_array.shape) - new_shape[append_axis] += v.shape[append_axis] - zarr_array.resize(new_shape) - elif name in self.ds: - # override existing variable - zarr_array = self.ds[name] - region = None + if self.append_dim is not None and self.append_dim in dims: + # resize existing variable + append_axis = dims.index(self.append_dim) + + new_region = [slice(None)] * len(dims) + new_region[append_axis] = slice(zarr_array.shape[append_axis], None) + region = tuple(new_region) + + new_shape = list(zarr_array.shape) + new_shape[append_axis] += v.shape[append_axis] + zarr_array.resize(new_shape) + else: + # override existing variable + region = None else: # new variable encoding = extract_zarr_variable_encoding(