Да, как сказал Эван, не проверяйте тип. Просто попробуйте использовать значение:
def myintfunction(value):
""" Please pass an integer """
return 2 + value
Это не имеет проверки типа. Это намного лучше! Посмотрим, что произойдет, когда я попробую:
>>> myintfunction(5)
7
Это работает, потому что это целое число. Гектометр Давайте попробуем текст.
>>> myintfunction('text')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in myintfunction
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Он показывает ошибку TypeError, которая должна быть в любом случае. Если звонящий хочет поймать это, это возможно.
Что бы вы сделали, если бы сделали проверку типов? Покажите ошибку правильно? Так что вам не нужно проверять тип, потому что ошибка уже появляется автоматически.
Кроме того, поскольку вы не проверили проверку типов, ваша функция работает с другими типами:
поплавки:
>>> print myintfunction(2.2)
4.2
Комплексные числа:
>>> print myintfunction(5j)
(2+5j)
Десятичные:
>>> import decimal
>>> myintfunction(decimal.Decimal('15'))
Decimal("17")
Даже совершенно произвольные объекты, которые могут добавлять числа!
>>> class MyAdderClass(object):
... def __radd__(self, value):
... print 'got some value: ', value
... return 25
...
>>> m = MyAdderClass()
>>> print myintfunction(m)
got some value: 2
25
Таким образом, вы явно ничего не получаете, проверяя типы. И много потерять.
UPDATE:
Поскольку вы отредактировали вопрос, теперь стало ясно, что ваше приложение вызывает некоторую восходящую подпрограмму, которая имеет смысл только для целых чисел.
В таком случае, я все же думаю, что вы должны передать параметр , полученный , в функцию восходящего потока. Функция upstream справится с этим правильно, например, поднять ошибку, если это необходимо. Я очень сомневаюсь, что ваша функция, имеющая дело с IP, будет вести себя странно, если вы передадите ей float. Если вы можете дать нам название библиотеки, мы можем проверить это для вас.
Но ... Если вышестоящая функция будет вести себя некорректно и убить некоторых детей, если вы передадите ей float (я все еще сильно сомневаюсь в этом), тогда просто вызовите int()
:
def myintfunction(value):
""" Please pass an integer """
return upstreamfunction(int(value))
Вы все еще не проверяете типизацию, поэтому вы получаете большинство преимуществ, не проверяющих тип.
Если даже после всего этого вы действительно хотите ввести проверку, несмотря на то, что это снижает читабельность и производительность вашего приложения без какой-либо выгоды, используйте для этого assert
.
assert isinstance(...)
assert type() is xxxx
Таким образом, мы можем отключить assert
с и удалить эту <sarcasm>
функцию </sarcasm>
из программы, назвав ее
python -OO program.py