Может быть другой, лучший подход, но одно решение - позволить вашей функции принимать любое количество аргументов, а затем проверять количество аргументов, переданных при вызове функции:
def foo(*args):
if len(args) != 3:
raise TypeError("Custom error!")
return sum(args)
foo(1, 2, 3)
# 6
foo(1, 2)
# Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# File "<stdin>", line 3, in foo
# TypeError: Custom error!