Skip to content

Commit aac2d42

Browse files
committed
quick follow-up #126 : better error message
1 parent efad842 commit aac2d42

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

xsimlab/tests/test_xr_accessor.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,12 @@ def test_set_input_vars(self, model, in_dataset):
209209

210210
assert ds["add__offset"].dims == ("x",)
211211

212+
# test implicit dimension label error
213+
in_vars = {("roll", "shift"): [1, 2]}
214+
215+
with pytest.raises(TypeError, match=r"Could not get dimension labels.*"):
216+
ds.xsimlab._set_input_vars(model, in_vars)
217+
212218
def test_update_clocks(self, model):
213219
ds = xr.Dataset()
214220
with pytest.raises(ValueError) as excinfo:

xsimlab/xr_accessor.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,7 @@ def _uniformize_clock_coords(self, dim=None, units=None, calendar=None):
290290

291291
def _set_input_vars(self, model, input_vars):
292292
invalid_inputs = set(input_vars) - set(model.input_vars)
293+
293294
if invalid_inputs:
294295
raise KeyError(
295296
", ".join([str(k) for k in invalid_inputs])
@@ -307,7 +308,13 @@ def _set_input_vars(self, model, input_vars):
307308
# dimension labels that match the number of dimensions
308309
ndims = len(np.shape(data))
309310
dim_labels = {len(d): d for d in var_metadata["dims"]}
310-
dims = dim_labels[ndims]
311+
dims = dim_labels.get(ndims)
312+
313+
if dims is None:
314+
raise TypeError(
315+
"Could not get dimension labels from model "
316+
f"for variable {xr_var_name!r} with value {data}"
317+
)
311318

312319
xr_var = as_variable((dims, data))
313320

0 commit comments

Comments
 (0)