Skip to content

Commit 7967cd1

Browse files
Fix ruff/bugbear issues (B904)
B904 Within an `except` clause, raise exceptions with `raise ... from err` or `raise ... from None` to distinguish them from errors in exception handling https://docs.astral.sh/ruff/rules/raise-without-from-inside-except/
1 parent cfedcdb commit 7967cd1

File tree

10 files changed

+33
-33
lines changed

10 files changed

+33
-33
lines changed

zarr/_storage/absstore.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,8 @@ def __getitem__(self, key):
143143
blob_name = self._append_path_to_prefix(key)
144144
try:
145145
return self.client.download_blob(blob_name).readall()
146-
except ResourceNotFoundError:
147-
raise KeyError(f"Blob {blob_name} not found")
146+
except ResourceNotFoundError as e:
147+
raise KeyError(f"Blob {blob_name} not found") from e
148148

149149
def __setitem__(self, key, value):
150150
value = ensure_bytes(value)
@@ -156,8 +156,8 @@ def __delitem__(self, key):
156156

157157
try:
158158
self.client.delete_blob(self._append_path_to_prefix(key))
159-
except ResourceNotFoundError:
160-
raise KeyError(f"Blob {key} not found")
159+
except ResourceNotFoundError as e:
160+
raise KeyError(f"Blob {key} not found") from e
161161

162162
def __eq__(self, other):
163163
return (

zarr/_storage/v3_storage_transformers.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -183,8 +183,8 @@ def __getitem__(self, key):
183183
shard_key, chunk_subkey = self._key_to_shard(key)
184184
try:
185185
full_shard_value = self.inner_store[shard_key]
186-
except KeyError:
187-
raise KeyError(key)
186+
except KeyError as e:
187+
raise KeyError(key) from e
188188
index = self._get_index_from_buffer(full_shard_value)
189189
chunk_slice = index.get_chunk_slice(chunk_subkey)
190190
if chunk_slice is not None:
@@ -265,8 +265,8 @@ def __delitem__(self, key):
265265
shard_key, chunk_subkey = self._key_to_shard(key)
266266
try:
267267
index = self._get_index_from_store(shard_key)
268-
except KeyError:
269-
raise KeyError(key)
268+
except KeyError as e:
269+
raise KeyError(key) from e
270270

271271
index.set_chunk_slice(chunk_subkey, None)
272272

zarr/core.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,8 +196,8 @@ def _load_metadata_nosync(self):
196196
try:
197197
mkey = _prefix_to_array_key(self._store, self._key_prefix)
198198
meta_bytes = self._store[mkey]
199-
except KeyError:
200-
raise ArrayNotFoundError(self._path)
199+
except KeyError as e:
200+
raise ArrayNotFoundError(self._path) from e
201201
else:
202202
# decode and store metadata as instance members
203203
meta = self._store._metadata_class.decode_array_metadata(meta_bytes)

zarr/hierarchy.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -186,16 +186,16 @@ def __init__(
186186
mkey = _prefix_to_group_key(self._store, self._key_prefix)
187187
assert not mkey.endswith("root/.group")
188188
meta_bytes = store[mkey]
189-
except KeyError:
189+
except KeyError as e:
190190
if self._version == 2:
191-
raise GroupNotFoundError(path)
191+
raise GroupNotFoundError(path) from e
192192
else:
193193
implicit_prefix = meta_root + self._key_prefix
194194
if self._store.list_prefix(implicit_prefix):
195195
# implicit group does not have any metadata
196196
self._meta = None
197197
else:
198-
raise GroupNotFoundError(path)
198+
raise GroupNotFoundError(path) from e
199199
else:
200200
self._meta = self._store._metadata_class.decode_group_metadata(meta_bytes)
201201

@@ -518,8 +518,8 @@ def __getattr__(self, item):
518518
# allow access to group members via dot notation
519519
try:
520520
return self.__getitem__(item)
521-
except KeyError:
522-
raise AttributeError
521+
except KeyError as e:
522+
raise AttributeError from e
523523

524524
def __dir__(self):
525525
# noinspection PyUnresolvedReferences

zarr/indexing.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -932,7 +932,7 @@ def check_fields(fields, dtype):
932932
# multiple field selection
933933
out_dtype = np.dtype([(f, dtype[f]) for f in fields])
934934
except KeyError as e:
935-
raise IndexError(f"invalid 'fields' argument, field not found: {e!r}")
935+
raise IndexError(f"invalid 'fields' argument, field not found: {e!r}") from e
936936
else:
937937
return out_dtype
938938
else:

zarr/meta.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -310,8 +310,8 @@ def decode_dtype(cls, d, validate=True):
310310
# extract the type from the extension info
311311
try:
312312
d = d["type"]
313-
except KeyError:
314-
raise KeyError("Extended dtype info must provide a key named 'type'.")
313+
except KeyError as e:
314+
raise KeyError("Extended dtype info must provide a key named 'type'.") from e
315315
d = cls._decode_dtype_descr(d)
316316
dtype = np.dtype(d)
317317
if validate:
@@ -518,7 +518,7 @@ def decode_array_metadata(cls, s: Union[MappingType, bytes, str]) -> MappingType
518518
meta["storage_transformers"] = storage_transformers
519519

520520
except Exception as e:
521-
raise MetadataError(f"error decoding metadata: {e}")
521+
raise MetadataError(f"error decoding metadata: {e}") from e
522522
else:
523523
return meta
524524

zarr/meta_v1.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def decode_metadata(b):
2323
order=meta["order"],
2424
)
2525
except Exception as e:
26-
raise MetadataError(f"error decoding metadata: {e}")
26+
raise MetadataError(f"error decoding metadata: {e}") from e
2727
else:
2828
return meta
2929

zarr/n5.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -608,8 +608,8 @@ def array_metadata_to_n5(array_metadata: Dict[str, Any], top_level=False) -> Dic
608608
array_metadata["n5"] = N5_FORMAT
609609
try:
610610
dtype = np.dtype(array_metadata["dataType"])
611-
except TypeError:
612-
raise TypeError(f"Data type {array_metadata['dataType']} is not supported by N5")
611+
except TypeError as e:
612+
raise TypeError(f"Data type {array_metadata['dataType']} is not supported by N5") from e
613613

614614
array_metadata["dataType"] = dtype.name
615615
array_metadata["dimensions"] = array_metadata["dimensions"][::-1]

zarr/storage.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -872,8 +872,8 @@ def __getitem__(self, item: str):
872872
parent, key = self._get_parent(item)
873873
try:
874874
value = parent[key]
875-
except KeyError:
876-
raise KeyError(item)
875+
except KeyError as e:
876+
raise KeyError(item) from e
877877
else:
878878
if isinstance(value, self.cls):
879879
raise KeyError(item)
@@ -891,8 +891,8 @@ def __delitem__(self, item: str):
891891
parent, key = self._get_parent(item)
892892
try:
893893
del parent[key]
894-
except KeyError:
895-
raise KeyError(item)
894+
except KeyError as e:
895+
raise KeyError(item) from e
896896

897897
def __contains__(self, item: str): # type: ignore[override]
898898
try:
@@ -1140,7 +1140,7 @@ def __setitem__(self, key, value):
11401140
os.makedirs(dir_path)
11411141
except OSError as e:
11421142
if e.errno != errno.EEXIST:
1143-
raise KeyError(key)
1143+
raise KeyError(key) from e
11441144

11451145
# write to temporary file
11461146
# note we're not using tempfile.NamedTemporaryFile to avoid restrictive file permissions

zarr/util.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -198,11 +198,11 @@ def normalize_dtype(dtype: Union[str, np.dtype], object_codec) -> Tuple[np.dtype
198198
args = []
199199
try:
200200
object_codec = codec_registry[codec_id](*args)
201-
except KeyError: # pragma: no cover
201+
except KeyError as e: # pragma: no cover
202202
raise ValueError(
203203
f"codec {codec_id!r} for object type {key!r} is not "
204204
f"available; please provide an object_codec manually"
205-
)
205+
) from e
206206
return dtype, object_codec
207207

208208
dtype = np.dtype(dtype)
@@ -323,7 +323,7 @@ def normalize_fill_value(fill_value, dtype: np.dtype):
323323
raise ValueError(
324324
f"fill_value {fill_value!r} is not valid for dtype {dtype}; "
325325
f"nested exception: {e}"
326-
)
326+
) from e
327327

328328
return fill_value
329329

@@ -484,13 +484,13 @@ def tree_widget_sublist(node, root=False, expand=False):
484484
def tree_widget(group, expand, level):
485485
try:
486486
import ipytree
487-
except ImportError as error:
487+
except ImportError as e:
488488
raise ImportError(
489-
f"{error}: Run `pip install zarr[jupyter]` or `conda install ipytree`"
489+
f"{e}: Run `pip install zarr[jupyter]` or `conda install ipytree`"
490490
f"to get the required ipytree dependency for displaying the tree "
491491
f"widget. If using jupyterlab<3, you also need to run "
492492
f"`jupyter labextension install ipytree`"
493-
)
493+
) from e
494494

495495
result = ipytree.Tree()
496496
root = TreeNode(group, level=level)

0 commit comments

Comments
 (0)