Помните, что вы можете создавать подклассы встроенных классов исключений в Python (и TypeError
, безусловно, будет правильным встроенным классом исключений, который нужно поднять здесь - это то, что вызывает Python, если число аргументов не соответствует сигнатуре, в нормальные случаи без *a
или **k
форм в подписи). Мне нравится, когда каждый пакет определяет свой собственный class Error(Exception)
, и тогда конкретные исключения по мере необходимости могут умножаться наследовать по мере необходимости, например ::
class WrongNumberOfArguments(thispackage.Error, TypeError):
Тогда я бы raise WrongNumberOfArguments
обнаружил бы такую проблемную ситуацию.
Таким образом, любой вызывающий абонент, который знает об этом пакете, может перехватить thispackage.Error
, если ему необходимо устранить какую-либо ошибку, специфичную для пакета, в то время как другие вызывающие (предположительно выше в цепочке вызовов) вызовы все еще перехватывают более общий TypeError
для устранения любых ошибок, таких как «неправильное количество аргументов, используемых в вызове функции».