def to_python(self, value):
if value is None:
return value
try:
return decimal.Decimal(value)
except decimal.InvalidOperation:
raise exceptions.ValidationError(
self.error_messages['invalid'],
code='invalid',
params={'value': value},
)
python类InvalidOperation()的实例源码
def process_formdata(self, valuelist):
if valuelist:
try:
lat, lon = valuelist[0].split(',')
self.data = '%s,%s' % (decimal.Decimal(lat.strip()), decimal.Decimal(lon.strip()),)
except (decimal.InvalidOperation, ValueError):
raise ValueError('Not a valid coordinate location')
def process_formdata(self, valuelist):
if valuelist:
try:
if self.use_locale:
self.data = self._parse_decimal(valuelist[0])
else:
self.data = decimal.Decimal(valuelist[0])
except (decimal.InvalidOperation, ValueError):
self.data = None
raise ValueError(self.gettext('Not a valid decimal value'))
def process_formdata(self, valuelist):
if valuelist:
try:
lat, lon = valuelist[0].split(',')
self.data = '%s,%s' % (decimal.Decimal(lat.strip()), decimal.Decimal(lon.strip()),)
except (decimal.InvalidOperation, ValueError):
raise ValueError('Not a valid coordinate location')
def process_formdata(self, valuelist):
if valuelist:
try:
if self.use_locale:
self.data = self._parse_decimal(valuelist[0])
else:
self.data = decimal.Decimal(valuelist[0])
except (decimal.InvalidOperation, ValueError):
self.data = None
raise ValueError(self.gettext('Not a valid decimal value'))
def _parse_x_y(_x, _y):
try:
x = Decimal(_x)
y = Decimal(_y)
except (InvalidOperation, TypeError, ValueError):
try:
x = cast_date(_x)['date']
y = cast_date(_y)['date']
except (ValueError, KeyError, IndexError, TypeError):
x, y = _x, _y
return x, y
def set_members(self, *args):
if not args:
# Reset members if nothing was given
self._members = []
return
new_members = []
for member in args:
member = list(member)
try:
member[1] = decimal.Decimal(str(member[1]))
except decimal.InvalidOperation:
raise ValueError("Member '{member}' is invalid".format(
member=member))
new_members.append(tuple(member))
new_members.sort(key=lambda x: x[1], reverse=True)
if self._members == new_members:
return
self._members = new_members
self._nr_members = len(new_members)
min_weight = min(i[1] for i in self._members)
self._ratios = []
for _, weight in self._members:
self._ratios.append(int(weight / min_weight * 100))
self.reset()
def __call__(self, value):
try:
if isinstance(value, decimal.Decimal):
v = value
else:
v = decimal.Decimal(str(value).replace(self.dot, '.'))
if ((self.minimum is None or v >= self.minimum) and
(self.maximum is None or v <= self.maximum)):
return (v, None)
except (ValueError, TypeError, decimal.InvalidOperation):
pass
return (value, self.error_message)
def _getBpm(self):
from decimal import Decimal, ROUND_HALF_UP, InvalidOperation
bpm = None
if frames.BPM_FID in self.frame_set:
bpm_str = self.frame_set[frames.BPM_FID][0].text or u"0"
try:
# Round floats since the spec says this is an integer. Python3
# changed how 'round' works, hence the using of decimal
bpm = int(Decimal(bpm_str).quantize(1, ROUND_HALF_UP))
except (InvalidOperation, ValueError) as ex:
log.warning(ex)
return bpm
def is_numeric(strin):
import decimal
# Decimal allows spaces in input, but we don't
if strin.strip() != strin:
return False
try:
value = decimal.Decimal(strin)
except decimal.InvalidOperation as e:
return False
return True
def _apply(self, value):
allowed_types = (text_type, int, float, DecimalType,)
if self.allow_tuples:
# Python's Decimal type supports both tuples and lists.
# :py:meth:`decimal.Decimal.__init__`
allowed_types += (list, tuple,)
value = self._filter(value, Type(allowed_types))
if self._has_errors:
return value
try:
d = DecimalType(value)
except (InvalidOperation, TypeError, ValueError):
return self._invalid_value(value, self.CODE_INVALID, exc_info=True)
# Decimal's constructor also accepts values such as 'NaN' or
# '+Inf', which aren't valid in this context.
# :see: decimal.Decimal._parser
if not d.is_finite():
return self._invalid_value(
value = value,
reason = self.CODE_NON_FINITE,
exc_info = True,
)
if self.max_precision is not None:
d = d.quantize(self.max_precision)
return d
def numberise(value, group_symbol, decimal_symbol, currency_symbols):
"""
Convert a string to a :class:`decimal.Decimal` object, if the string
is number-like.
A string's considered number-like if it's made up of numbers with
or without group and decimal symbols, and optionally suffixed by
percent signs, prefixed by a +/- sign, or surrounded by currency
symbols. It's pretty lenient, and could easily parse something as a
number when it's not, but it's good enough.
Args:
value: String to attempt to convert to a number
group_symbol: symbol used to group digits in numbers (e.g. the
',' in '1,000.00')
decimal_symbol: Symbol used to separate integer from fraction in
numbers (e.g. the '.' in '1,000.00').
currency_symbols: List of currency symbols.
Returns:
:class:`decimal.Decimal`
Raises:
:class:`ValueError`: ``value`` is not numeric
"""
number = value.strip("%")
if len(number) > 0 and number[0] == "-":
number = number[1:]
sign = Decimal("-1")
else:
sign = Decimal("1")
for symbol in currency_symbols:
number = number.strip(symbol)
number = number.replace(group_symbol, "")
number = number.replace(decimal_symbol, ".")
try:
return Decimal(number) * sign
except InvalidOperation:
raise ValueError("{} is not numeric".format(value))
def is_numeric(strin):
import decimal
strin = str(strin)
# Decimal allows spaces in input, but we don't
if strin.strip() != strin:
return False
try:
value = decimal.Decimal(strin)
except decimal.InvalidOperation as e:
return False
return True
def process_formdata(self, valuelist):
if valuelist:
try:
lat, lon = valuelist[0].split(',')
self.data = '%s,%s' % (decimal.Decimal(lat.strip()), decimal.Decimal(lon.strip()),)
except (decimal.InvalidOperation, ValueError):
raise ValueError('Not a valid coordinate location')
def process_formdata(self, valuelist):
if valuelist:
try:
self.data = decimal.Decimal(valuelist[0])
except (decimal.InvalidOperation, ValueError):
self.data = None
raise ValueError(self.gettext('Not a valid decimal value'))
def set_members(self, *args):
if not args:
# Reset members if nothing was given
self._members = []
return
new_members = []
for member in args:
member = list(member)
try:
member[1] = decimal.Decimal(str(member[1]))
except decimal.InvalidOperation:
raise ValueError("Member '{member}' is invalid".format(
member=member))
new_members.append(tuple(member))
new_members.sort(key=lambda x: x[1], reverse=True)
if self._members == new_members:
return
self._members = new_members
self._nr_members = len(new_members)
min_weight = min(i[1] for i in self._members)
self._ratios = []
for _, weight in self._members:
self._ratios.append(int(weight/min_weight * 100))
self.reset()
def from_xml(self, elem, account):
field_elem = elem.find(self.response_tag())
val = None if field_elem is None else field_elem.text or None
if val is not None:
try:
return self.value_cls(val)
except (ValueError, InvalidOperation):
log.warning("Cannot convert value '%s' on field '%s' to type %s", val, self.name, self.value_cls)
return None
return self.default
def __call__(self, value):
try:
if isinstance(value, decimal.Decimal):
v = value
else:
v = decimal.Decimal(str(value).replace(self.dot, '.'))
if ((self.minimum is None or v >= self.minimum) and
(self.maximum is None or v <= self.maximum)):
return (v, None)
except (ValueError, TypeError, decimal.InvalidOperation):
pass
return (value, self.error_message)
def process_formdata(self, valuelist):
if valuelist:
try:
lat, lon = valuelist[0].split(',')
self.data = '%s,%s' % (decimal.Decimal(lat.strip()), decimal.Decimal(lon.strip()),)
except (decimal.InvalidOperation, ValueError):
raise ValueError('Not a valid coordinate location')
def process_formdata(self, valuelist):
if valuelist:
try:
if self.use_locale:
self.data = self._parse_decimal(valuelist[0])
else:
self.data = decimal.Decimal(valuelist[0])
except (decimal.InvalidOperation, ValueError):
self.data = None
raise ValueError(self.gettext('Not a valid decimal value'))