Source code for iris.exceptions
# Copyright Iris contributors
#
# This file is part of Iris and is released under the BSD license.
# See LICENSE in the root of the repository for full licensing details.
"""Exceptions specific to the Iris package."""
[docs]
class IrisError(Exception):
"""Base class for errors in the Iris package."""
pass
[docs]
class CoordinateCollapseError(IrisError):
"""Raised when a requested coordinate cannot be collapsed."""
pass
[docs]
class CoordinateNotFoundError(KeyError):
"""Raised when a search yields no coordinates."""
pass
[docs]
class CellMeasureNotFoundError(KeyError):
"""Raised when a search yields no cell measures."""
pass
[docs]
class AncillaryVariableNotFoundError(KeyError):
"""Raised when a search yields no ancillary variables."""
pass
[docs]
class ConnectivityNotFoundError(KeyError):
"""Raised when a search yields no connectivities."""
pass
[docs]
class CoordinateMultiDimError(ValueError):
"""Raised when a routine doesn't support multi-dimensional coordinates."""
def __init__(self, msg):
# N.B. deferred import to avoid a circular import dependency.
import iris.coords
if isinstance(msg, iris.coords.Coord):
fmt = "Multi-dimensional coordinate not supported: '%s'"
msg = fmt % msg.name()
ValueError.__init__(self, msg)
[docs]
class CoordinateNotRegularError(ValueError):
"""Raised when a coordinate is unexpectedly irregular."""
pass
[docs]
class InvalidCubeError(IrisError):
"""Raised when a Cube validation check fails."""
pass
[docs]
class ConstraintMismatchError(IrisError):
"""Raised when a constraint operation has failed to find the correct number of results."""
pass
[docs]
class NotYetImplementedError(IrisError):
"""Raised by missing functionality.
Different meaning to NotImplementedError, which is for abstract methods.
"""
pass
[docs]
class TranslationError(IrisError):
"""Raised when Iris is unable to translate format-specific codes."""
pass
[docs]
class IgnoreCubeException(IrisError):
"""Raised from a callback function when a cube should be ignored on load."""
pass
[docs]
class ConcatenateError(IrisError):
"""Raised when concatenate is expected to produce a single cube, but fails to do so."""
def __init__(self, differences):
"""Create a ConcatenateError with a list of textual descriptions of differences.
Create a ConcatenateError with a list of textual descriptions of
the differences which prevented a concatenate.
Parameters
----------
differences : list of str
The list of strings which describe the differences.
"""
self.differences = differences
def __str__(self):
return "\n ".join(
["failed to concatenate into a single cube."] + list(self.differences)
)
[docs]
class MergeError(IrisError):
"""Raised when merge is expected to produce a single cube, but fails to do so."""
def __init__(self, differences):
"""Create a MergeError with a list of textual descriptions of the differences.
Creates a MergeError with a list of textual descriptions of
the differences which prevented a merge.
Parameters
----------
differences : list of str
The list of strings which describe the differences.
"""
self.differences = differences
def __str__(self):
return "\n ".join(
["failed to merge into a single cube."] + list(self.differences)
)
[docs]
class DuplicateDataError(MergeError):
"""Raised when merging two or more cubes that have identical metadata."""
def __init__(self, msg):
self.differences = [msg]
[docs]
class LazyAggregatorError(Exception):
pass
[docs]
class UnitConversionError(IrisError):
"""Raised when Iris is unable to convert a unit."""
pass
[docs]
class CannotAddError(ValueError):
"""Raised when an object (e.g. coord) cannot be added to a :class:`~iris.cube.Cube`."""
pass
[docs]
class DatalessError(ValueError):
"""Raised when an method cannot be performed on a dataless :class:`~iris.cube.Cube`."""
def __str__(self):
msg = (
"Dataless cubes are still early in implementation, and dataless {} "
"operations are not currently supported."
)
return msg.format(super().__str__())