Logo

Programming-Idioms

This language bar is your friend. Select your favorite languages!

Idiom #89 Handle invalid argument

You've detected that the integer value of argument x passed to the current function is invalid. Write the idiomatic way to abort the function execution and signal the problem.

void foo(int x)
in
{
    assert(x != 0, "wrong value for x");
}
body
{
    // function
}
import std.format;
throw new Exception("invalid value for x (%s) in '%s'".format(x, __PRETTY_FUNCTION__));
enum {
    E_OK,
    E_OUT_OF_RANGE
};

int square(int x, int *result) {
    if (x > 1073741823) {
        return E_OUT_OF_RANGE;
    }
    *result = x*x;
    return E_OK;
}
throw domain_error("oops!");
throw new ArgumentException(nameof(×));
error(badarg).
  if (x > largest_value) error stop "Illegal value in function."
return nil, fmt.Errorf("invalid value for x: %v", x)
throw new IllegalArgumentException("Invalid value for x: $x")
sqrt' :: Int -> Either String Int
sqrt' x | x < 0 = Left "Invalid argument"
sqrt' x         = Right (sqrt x)
throw new Error('x is invalid');
<T> void f(T x) {
    Objects.requireNonNull(x);
}
<T> void f(T x) throws Exception {
    if (x != value) throw new Exception();
}
void f(int x) {
    Objects.checkIndex(x, 123);
}
throw new IllegalArgumentException("Invalid value for x:" + x);
return nil, "Invalid argument x"
error("Invalid argument x")
throw new \InvalidArgumentException($x . ' is invalid.');
Uses sysutils, math;
Raise EInvalidArgument.CreatFmt('Invalid value: %d',[x]);
die "Invalid argument $x";
raise ValueError("x is invalid")
def check_index(length):
    def f(function):
        def _f(x):
            error(x >= length)
            return function(x)
        return _f
    return f
def require_nonnull(function):
    def f(x):
        error(not x)
        return function(x)
    return f
def error(value):
    if value:
        raise ValueError
@require_nonnull
@check_index(123)
def function(value):
    ...
function(x)
def check_range(start, stop):
    def wrap(f):
        def check(value):
            if not start <= value < stop:
                raise ValueError
            return True
        def wrapper(*args, **kwargs):
            if all(map(check, args)):
                return f(*args, **kwargs)
        return wrapper
    return wrap
@check_range(0, 3.14159)
def function(*args):
    ...
raise ArgumentError, "invalid value #{x}."
enum CustomError { InvalidAnswer }

fn do_stuff(x: i32) -> Result<i32, CustomError> {
    if x != 42 {
        Err(CustomError::InvalidAnswer)
    } else {
        Ok(x)
    }
}

New implementation...
< >
programming-idioms.org