@@ -299,12 +299,8 @@ async def open(
299299
300300 store_path = await make_store_path (store , mode = mode , path = path , storage_options = storage_options )
301301
302- # TODO: check for more array-only kwargs
303- expect_array = "shape" in kwargs
304-
305- if expect_array :
306- return await open_array (store = store_path , zarr_format = zarr_format , mode = mode , ** kwargs )
307- else :
302+ # TODO: the mode check below seems wrong!
303+ if "shape" not in kwargs and mode in _READ_MODES :
308304 try :
309305 metadata_dict = await get_array_metadata (store_path , zarr_format = zarr_format )
310306 # TODO: remove this cast when we fix typing for array metadata dicts
@@ -314,10 +310,18 @@ async def open(
314310 is_v3_array = zarr_format == 3 and _metadata_dict .get ("node_type" ) == "array"
315311 if is_v3_array or zarr_format == 2 :
316312 return AsyncArray (store_path = store_path , metadata = _metadata_dict )
317- except (AssertionError , NodeTypeValidationError , FileNotFoundError ):
313+ except (AssertionError , FileNotFoundError , NodeTypeValidationError ):
318314 pass
319315 return await open_group (store = store_path , zarr_format = zarr_format , mode = mode , ** kwargs )
320316
317+ try :
318+ return await open_array (store = store_path , zarr_format = zarr_format , mode = mode , ** kwargs )
319+ except (KeyError , NodeTypeValidationError ):
320+ # KeyError for a missing key
321+ # NodeTypeValidationError for failing to parse node metadata as an array when it's
322+ # actually a group
323+ return await open_group (store = store_path , zarr_format = zarr_format , mode = mode , ** kwargs )
324+
321325
322326async def open_consolidated (
323327 * args : Any , use_consolidated : Literal [True ] = True , ** kwargs : Any
@@ -1088,11 +1092,10 @@ async def open_array(
10881092 store_path = await make_store_path (store , path = path , mode = mode , storage_options = storage_options )
10891093
10901094 zarr_format = _handle_zarr_version_or_format (zarr_version = zarr_version , zarr_format = zarr_format )
1091-
10921095 try :
10931096 return await AsyncArray .open (store_path , zarr_format = zarr_format )
10941097 except FileNotFoundError :
1095- if not store_path .read_only :
1098+ if not store_path .read_only and mode in _CREATE_MODES :
10961099 exists_ok = _infer_exists_ok (mode )
10971100 _zarr_format = zarr_format or _default_zarr_version ()
10981101 return await create (
0 commit comments