Я не уверен, что это ответит на ваш вопрос, но мне кажется, что проверка большого количества аргументов в начале функции не очень pythonic .
Под этим я подразумеваю, что большинство питонистов полагают, что мы все взрослые по обоюдному согласию, и мы доверяем друг другу, чтобы не делать глупостей. Вот как бы я написал ваш пример:
def myfun(a, b):
'''a cannot be < 0'''
return a + b
Это имеет три явных преимущества. Во-первых, это кратко, на самом деле нет никакого дополнительного кода, делающего что-либо, не имеющее отношения к тому, что вы на самом деле пытаетесь выполнить. Во-вторых, он помещает информацию именно туда, где она находится, в help(myfun)
, где ожидается, что pythonistas будет искать примечания по использованию. Наконец, действительно ли неположительное значение для a
является ошибкой? Хотя вы можете так думать, если что-то определенно не сломается, если a равно нулю (здесь это, вероятно, не будет), тогда, возможно, пропустить это и вызвать ошибку в потоке вызовов, что мудрее. в конце концов, если a + b
содержит ошибку, это вызывает исключение, которое передается в стек вызовов, и поведение остается почти таким же.