-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
xarray 0.18.0 raises ValueError, not FileNotFoundError, when opening a non-existent file #5329
Comments
Thanks for the report - I added that to the list of todos for the 0.18.1 patch release. |
I think that It's not a bug: |
@aurghs Point taken, but in that case the In principle, though, I'd be OK with any selection of potential exceptions, as long as they're documented. The current practical problem for us (the xcube developers) is that the behaviour change from 0.17 to 0.18 means that we now have to audit our existing codebases for potential uncaught |
Ouch! I agree this is annoying. And yes, the open_dataset docs definitely need updating. The general rule is that Given this use case, perhaps we should have a special exception type here, something like |
Actually, thinking about this a little more, you should get But if you pass in a local filesystem path and try to open an entirely non-existent file, then In theory, one could write an |
@shoyer and @pont-us my take is that I think it is OK to add a dedicated Examples of strings that identify a dataset when the right backend is installed, but are not paths and the
|
I'm reluctantly inclined to agree. (But "reluctantly" only because this means that we may have a lot of xcube code to check and update now.) If the engine is explicitly specified, the question of which exceptions to expect becomes a lot easier to handle, since it's now just between the caller and the engine. Probably the |
I just accidentally tried to open
|
What happened:
In a Python environment with xarray 0.18.0 and python-netcdf4 installed, I called
xarray.open_dataset("nonexistent")
. (The file "nonexistent" does not exist.) xarray threw aValueError: cannot guess the engine, try passing one explicitly
.What you expected to happen:
I expected a
FileNotFoundError
error to be thrown, as in xarray 0.17.0.Minimal Complete Verifiable Example:
Anything else we need to know?:
This is presumably related to Issue #5295, but is not fixed by PR #5296: ValueError is also thrown with the currently latest commit in master (9165c26).
This change in behaviour produced a hard-to-diagnose bug deep in xcube, where we were catching the FileNotFound exception to deal gracefully with a missing file, but the new ValueError was of course not caught -- and the error message did not make the cause obvious. Catching ValueError is a workaround, but not a great solution since it may also be thrown for files which do exist but don't have a recognizable data format. I suspect that other codebases may be similarly affected.
xarray 0.17.0 was capable of throwing a ValueError for a non-existent file, but only in the (rare?) case that neither netCDF4-python nor scipy was installed.
Environment:
Output of xr.show_versions()
INSTALLED VERSIONS ------------------ commit: None python: 3.9.4 | packaged by conda-forge | (default, May 10 2021, 22:13:33) [GCC 9.3.0] python-bits: 64 OS: Linux OS-release: 5.8.0-53-generic machine: x86_64 processor: x86_64 byteorder: little LC_ALL: None LANG: en_GB.UTF-8 LOCALE: en_GB.UTF-8 libhdf5: 1.10.6 libnetcdf: 4.8.0xarray: 0.18.0
pandas: 1.2.4
numpy: 1.20.2
scipy: None
netCDF4: 1.5.6
pydap: None
h5netcdf: None
h5py: None
Nio: None
zarr: None
cftime: 1.4.1
nc_time_axis: None
PseudoNetCDF: None
rasterio: None
cfgrib: None
iris: None
bottleneck: None
dask: None
distributed: None
matplotlib: None
cartopy: None
seaborn: None
numbagg: None
pint: None
setuptools: 49.6.0.post20210108
pip: 21.1.1
conda: None
pytest: None
IPython: None
sphinx: None
The text was updated successfully, but these errors were encountered: