8000 MNT : simplify and relax validation on nseq · matplotlib/matplotlib@a298ab2 · GitHub
[go: up one dir, main page]

Skip to content

Commit a298ab2

Browse files
committed
MNT : simplify and relax validation on nseq
Simplify and relax the validation for sequences of floats and ints. - unified logic - input is not restricted to coma-separated lists, list, and tuples. any length 2 sequence (like an array) will now work.
1 parent ec7276c commit a298ab2

File tree

1 file changed

+30
-26
lines changed

1 file changed

+30
-26
lines changed

lib/matplotlib/rcsetup.py

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -172,50 +172,54 @@ def validate_maskedarray(v):
172172
' please delete it from your matplotlibrc file')
173173

174174

175-
class validate_nseq_float:
175+
_seq_err_msg = ('You must supply exactly {n:d} values, you provided '
176+
'{num:d} values: {s}')
177+
178+
_str_err_msg = ('You must supply exactly {n:d} comma-separated values, '
179+
'you provided '
180+
'{num:d} comma-separated values: {s}')
181+
182+
183+
class validate_nseq_float(object):
176184
def __init__(self, n):
177185
self.n = n
178186

179187
def __call__(self, s):
180188
"""return a seq of n floats or raise"""
181189
if isinstance(s, six.string_types):
182-
ss = s.split(',')
183-
if len(ss) != self.n:
184-
raise ValueError(
185-
'You must supply exactly %d comma separated values' %
186-
self.n)
187-
try:
188-
return [float(val) for val in ss]
189-
except ValueError:
190-
raise ValueError('Could not convert all entries to floats')
190+
s = s.split(',')
191+
err_msg = _str_err_msg
191192
else:
192-
assert type(s) in (list, tuple)
193-
if len(s) != self.n:
194-
raise ValueError('You must supply exactly %d values' % self.n)
193+
err_msg = _seq_err_msg
194+
195+
if len(s) != self.n:
196+
raise ValueError(err_msg.format(n=self.n, num=len(s), s=s))
197+
198+
try:
195199
return [float(val) for val in s]
200+
except ValueError:
201+
raise ValueError('Could not convert all entries to floats')
196202

197203

198-
class validate_nseq_int:
204+
class validate_nseq_int(object):
199205
def __init__(self, n):
200206
self.n = n
201207

202208
def __call__(self, s):
203209
"""return a seq of n ints or raise"""
204210
if isinstance(s, six.string_types):
205-
ss = s.split(',')
206-
if len(ss) != self.n:
207-
raise ValueError(
208-
'You must supply exactly %d comma separated values' %
209-
self.n)
210-
try:
211-
return [int(val) for val in ss]
212-
except ValueError:
213-
raise ValueError('Could not convert all entries to ints')
211+
s = s.split(',')
212+
err_msg = _str_err_msg
214213
else:
215-
assert type(s) in (list, tuple)
216-
if len(s) != self.n:
217-
raise ValueError('You must supply exactly %d values' % self.n)
214+
err_msg = _seq_err_msg
215+
216+
if len(s) != self.n:
217+
raise ValueError(err_msg.format(n=self.n, num=len(s), s=s))
218+
219+
try:
218220
return [int(val) for val in s]
221+
except ValueError:
222+
raise ValueError('Could not convert all entries to ints')
219223

220224

221225
def validate_color(s):

0 commit comments

Comments
 (0)
0