def _load_(self, value, context):
if isinstance(value, decimal.Decimal):
if not self.get_options().allow_nan and not value.is_finite():
raise ValueError()
return value
elif isinstance(value, text_types):
try:
with decimal.localcontext() as ctx:
ctx.traps[decimal.InvalidOperation] = 1
value = decimal.Decimal(value)
if not self.get_options().allow_nan and not value.is_finite():
raise ValueError()
return value
except decimal.InvalidOperation:
raise ValueError()
elif isinstance(value, integer_types):
return decimal.Decimal(value)
elif isinstance(value, float):
if not self.get_options().allow_nan:
if math.isnan(value) or math.isinf(value):
raise ValueError()
return decimal.Decimal(value)
else:
raise ValueError()
评论列表
文章目录