chronaxis.core.units
源码基线:8904c2f744951857659abd40aaa3535d57faf53c
1"""检查转换系数和范围端点的原生有限数值;单位关系由 unit_registry 统一提供。"""23from math import isfinite456def require_number(value: int | float, field: str) -> int | float:7 """要求有限原生数值,拒绝bool及未经声明的隐式标量转换。89 参数: value为原生int或有限float;field用于诊断位置。10 返回: 原数值,不改变整数精度。11 异常: TypeError为其他类型;ValueError为非有限float。12 """13 # bool不能作为工程转换系数或范围端点。14 if type(value) not in (int, float):15 # 配置层负责显式解析,不从任意对象取数值。16 raise TypeError(f"{field}必须为原生int或float")17 # 无界int本身有限,不能先转float造成伪溢出。18 if type(value) is float and not isfinite(value):19 # 非有限系数会污染全部输入,在执行前拒绝。20 raise ValueError(f"{field}必须有限")21 # 返回原值供精确配置和后续数值层使用。22 return value23