forked from SciTools/iris
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexceptions.py
More file actions
159 lines (111 loc) · 4.05 KB
/
Copy pathexceptions.py
File metadata and controls
159 lines (111 loc) · 4.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# (C) British Crown Copyright 2010 - 2017, Met Office
#
# This file is part of Iris.
#
# Iris is free software: you can redistribute it and/or modify it under
# the terms of the GNU Lesser General Public License as published by the
# Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Iris is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with Iris. If not, see <http://www.gnu.org/licenses/>.
"""
Exceptions specific to the Iris package.
"""
from __future__ import (absolute_import, division, print_function)
from six.moves import (filter, input, map, range, zip) # noqa
class IrisError(Exception):
"""Base class for errors in the Iris package."""
pass
class CoordinateCollapseError(IrisError):
"""Raised when a requested coordinate cannot be collapsed."""
pass
class CoordinateNotFoundError(KeyError):
"""Raised when a search yields no coordinates."""
pass
class CellMeasureNotFoundError(KeyError):
"""Raised when a search yields no cell measures."""
pass
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)
class CoordinateNotRegularError(ValueError):
"""Raised when a coordinate is unexpectedly irregular."""
pass
class InvalidCubeError(IrisError):
"""Raised when a Cube validation check fails."""
pass
class ConstraintMismatchError(IrisError):
"""
Raised when a constraint operation has failed to find the correct number
of results.
"""
pass
class NotYetImplementedError(IrisError):
"""
Raised by missing functionality.
Different meaning to NotImplementedError, which is for abstract methods.
"""
pass
class TranslationError(IrisError):
"""Raised when Iris is unable to translate format-specific codes."""
pass
class IgnoreCubeException(IrisError):
"""
Raised from a callback function when a cube should be ignored on load.
"""
pass
class ConcatenateError(IrisError):
"""
Raised when concatenate is expected to produce a single cube, but fails to
do so.
"""
def __init__(self, differences):
"""
Creates a ConcatenateError with a list of textual descriptions of
the differences which prevented a concatenate.
Args:
* differences:
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))
class MergeError(IrisError):
"""
Raised when merge is expected to produce a single cube, but fails to
do so.
"""
def __init__(self, differences):
"""
Creates a MergeError with a list of textual descriptions of
the differences which prevented a merge.
Args:
* differences:
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))
class DuplicateDataError(MergeError):
"""Raised when merging two or more cubes that have identical metadata."""
def __init__(self, msg):
self.differences = [msg]
class LazyAggregatorError(Exception):
pass
class UnitConversionError(IrisError):
"""Raised when Iris is unable to convert a unit."""
pass