diff --git a/apis/python/src/tiledbsoma/soma_vfs.cc b/apis/python/src/tiledbsoma/soma_vfs.cc index cc0211df72..dd57bf17d1 100644 --- a/apis/python/src/tiledbsoma/soma_vfs.cc +++ b/apis/python/src/tiledbsoma/soma_vfs.cc @@ -106,7 +106,12 @@ void load_soma_vfs(py::module& m) { .def( "open", [](SOMAVFSFilebuf& buf, const std::string& uri) { - return buf.open(uri, std::ios::in); + auto fb = buf.open(uri, std::ios::in); + if (fb == nullptr) { + TPY_ERROR_LOC( + std::format("URI {} is not a valid URI", uri)); + } + return fb; }, py::call_guard()) .def("read", &SOMAVFSFilebuf::read, "size"_a = -1) diff --git a/apis/python/tests/test_basic_anndata_io.py b/apis/python/tests/test_basic_anndata_io.py index 9ba7f15904..b08ac714eb 100644 --- a/apis/python/tests/test_basic_anndata_io.py +++ b/apis/python/tests/test_basic_anndata_io.py @@ -1528,3 +1528,8 @@ def test_decat_append(tmp_path): obs_table.column("bool_enum").to_pylist() == bool_enum_values_over + bool_enum_values_under ) + + +def test_from_h5ad_bad_uri(): + with pytest.raises(tiledbsoma.SOMAError, match="URI /nonesuch is not a valid URI"): + next(tiledbsoma.io._util.read_h5ad("/nonesuch").gen)