Files

15 lines
450 B
Python

"""Clamp a value to [lo, hi]. Handles None by raising, preserves type."""
from __future__ import annotations
def clamp(value, lo, hi):
if value is None or lo is None or hi is None:
raise ValueError("None is not a clampable value: value=%r, lo=%r, hi=%r" % (value, lo, hi))
if lo > hi:
raise ValueError("lo > hi: %r > %r" % (lo, hi))
if value < lo:
return lo
if value > hi:
return hi
return value