Test callables without raising exceptions
Project description
applicable.py
applicable.py is a very basic package with a single function: applicable()
. It is simply used to test if a callable can be called with a set of arguments without raising an error.
This package must be used with Python 3.6 or higher.
The signature of applicable()
is:
applicable(callable: Callable,
*args: Any,
**kwargs: Any,
ret_result: bool = True,
ret_exc: bool = True) -> Any
* Note: This is not the actual signature, as you can probably tell. The actual signature (and the one type checkers and other tools will give you) is applicable(callable: Callable, *args: Any, **kwargs: Any)
. As noted in the docstring (applicable.__doc__
), ret_result
and ret_exc
are special keyword arguments, and it would be preferred that they be used after the callable arguments.
Arguments:
callable
: The callable to be testedret_result
: Whether to returncallable(*args, **kwargs)
upon no error.True
by default. If false,applicable()
will returnTrue
upon no error.ret_exc
: Type or value to return upon error. Defaults to_FalseException
. With the exception of_FalseException
(which is returned as_FalseException(exception_instance)
), the default value for the type is returned, e.g.,int()
(which is0
),bool()
(False
),None
ifret_exc
is a type. Ifret_exc
is a value, the value is returned. Changed in version 1.1.0:ret_exc
was previously a boolean value specifying whether to return a_FalseException
or not.args
andkwargs
: The arguments that are passed tocallable()
.
This function will usually be used in an if
statement like the following:
from applicable import applicable
val = applicable(SomeCallable, 'arg!', a_kwarg='kwarg!')
if val == False or isinstance(val, _FalseException):
# Do somthing with val
else:
# Do something with the exception; use val.cls for the exception class
More examples, to show the full functionality of applicable()
(and _FalseException
):
>>> from applicable import applicable
>>> a = applicable(int, '4')
>>> a
4
>>>
>>> a = applicable(int, 'whoops')
>>> a
applicable._FalseException(exc_inst=ValueError(...))
>>> a.cls
<class 'ValueError'>
>>> a.inst
ValueError("invalid literal for int() with base 10: 'whoops'")
>>> bool(a)
False
>>>
>>> a = applicable(complex, 4, imag=3)
>>> a
(4+3j)
>>>
>>> a = applicable(complex, 4, imag=3, ret_result=False)
>>> a
True
>>> a = applicable(int, 'whoops', ret_exc=bool)
>>> a
False
>>> applicable(int, 'whoops', ret_exc=None)
None
>>> applicable(int, 'whoops', ret_exc=4)
4
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for applicable-1.1.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1c3f92bca12767eb3977e747d114478393cd118f3c6ce84d2278c0698bfc0226 |
|
MD5 | bd0b5b84ba13eb689a05c7fe51c71df3 |
|
BLAKE2b-256 | a58efad7f8b13755fa826558ac32838e53c74249628a95bb02f95565a8f9452e |