У меня есть функция, которая имеет параметр intTup
. Эта функция вызывается пользователем, и, следовательно, вход может быть ошибочным, поэтому я хочу его проверить.Должен ли я всегда проверять типы параметров каждой функции?
В частности, intTup
должен:
- быть кортеж
- быть длиной 3
- содержат только INTS
Так что, как только функция выполняется, те свойства, проверены:
def myFunc(intTup)
if type(intTup) is not tuple:
print("intTup = ", intTup)
print("type(intTup) = ", type(intTup))
raise Exception('In parameter intTup : should be a tuple of float')
elif (len(h) != 3) :
print("intTup = ", intTup)
print("len(intTup) = ", len(intTup))
raise Exception('In parameter intTup : should contain three atoms')
elif [int]*len(intTup) == map(type,intTup):
print("intTup = ", intTup)
print("type(intTup) = ", map(type,intTup))
raise Exception('In parameter h : all atoms should be ints')
# Some actual code follow these tests
Конечно, этот тип проверок часто встречается: в любой момент, когда функция допускает параметр кортежа типа, содержащий n значений типа t, должна выполняться аналогичная проверка. Следовательно, следует ли мне определить функцию checkTuple(tupleToTest, shouldBeLen, shouldBeType)
для автоматизации этих проверок? Или я должен оставить, как это? Как вы продвигаетесь в своих сценариях?
Вы хотите использовать 'if type (intTup) не кортеж:' вместо 'if not type (intTup) является кортежем:'? –
Зачем стоять на пути к дактилизму? пусть пользователи отправляют список или другие последовательности вашей функции, если они им нравятся :) –
@KevinGuan действительно, это было бы лучше! –