Убедитесь, что службы Internet Information Services (IIS) включены в функциях Windows на вашем компьютере.
Для вычислений как сумма, факториал и т.д., Python встроенные проверки типа сделают прекрасный. Вычисления закончат upp, который вызов добавляет , mul и т.д. для типов, и если они повредятся, то они выдадут корректное исключение так или иначе. Путем осуществления собственных проверок можно делать недействительным в других отношениях рабочий вход.
Я assert
, что абсолютно необходимо.
Важный: что абсолютно важно. Некоторые люди сверхтестируют вещи.
def factorial(num):
assert int(num)
assert num > 0
Не абсолютно корректно. долго также легальная возможность.
def factorial(num):
assert type(num) in ( int, long )
assert num > 0
лучше, но все еще прекрасен. Много типов Python (как рациональные числа или подобные числу объекты) могут также работать в хорошей функции факториала. Трудно утверждать, что объект имеет основные подобные целому числу свойства, не будучи слишком определенным и устраняющим будущим, о котором не думают - классов из рассмотрения.
я никогда не определяю уникальные исключения для отдельных функций. Я определяю уникальное исключение для значительного модуля или пакета. Обычно, однако, просто Error
класс или что-то подобное. Тем путем в приложении говорится except somelibrary.Error,e:
, который является обо всем, что необходимо знать. Мелкомодульные исключения становятся суетливыми и глупыми.
я никогда не делал этого, но я вижу места, где это могло бы быть необходимо.
assert all( type(i) in (int,long) for i in someList )
Обычно однако, обычный Python встроенные проверки типа хорошо работают. Они находят почти все исключительные ситуации тем вопросом почти все время. Когда что-то не правильный тип, Python повышает TypeError, который всегда указывает на правильную строку кода.
BTW. Я только добавляю, утверждает во время проектирования, если я абсолютно уверен, что функцией злоупотребят. Я иногда добавляю утверждения позже, когда у меня есть модульный тест, который перестал работать неясным способом.
Я пытаюсь записать утверждение docstring, какой параметр ожидается и принимается, и я не проверяю его явно в мои функции.
, Если кто-то хочет использовать мою функцию с каким-либо другим типом ее его обязанность проверить, эмулирует ли его тип тот, я принимаю достаточно хорошо. Возможно, Ваш факториал может использоваться с некоторым пользовательским как будто длинным типом для получения чего-то, о чем Вы не думали бы? Или возможно Ваша сумма может использоваться для конкатенации строк? Почему необходимо запретить его проверкой типа? Это не C, так или иначе.
Я в основном пытаюсь преобразовать переменную в то, чем это должно быть и отказаться или выдать соответствующее исключение, если это перестало работать.
def factorial(num):
"""Computes the factorial of num."""
try:
num = int(num)
except ValueError, e:
print e
else:
...
Это скорее зависит от того, что я пишу, и как вывод добирается там. Python не имеет общедоступных/частных мер защиты других языков OO. Вместо этого существуют конвенции. Например, внешний код должен только назвать методы объекта, которые не снабжаются префиксом подчеркиванием.
Поэтому, если бы я пишу модуль, я проверил бы что-либо, что не сгенерировано из моего собственного кода, т.е. любых вызовов к публично доступным методам/функциям. Иногда, если я знаю, что проверка является дорогой, я делаю ее togglable с kwarg:
def publicly_accessible_function(arg1, validate=False):
if validate:
do_validation(arg1)
do_work
Внутренние методы могут сделать, проверка через эти утверждает оператор, который может быть отключен в целом, когда код выходит из разработки и в производство.
Я почти никогда не осуществляю, любой своего рода проверяет, если я не думаю, что существует возможность, что кто-то мог бы думать, что они могут передать приблизительно X, которые привели бы к абсолютно сумасшедшим результатам.
другое время, которое я проверяю, - когда я принимаю несколько типов для аргумента, например, функция, которая берет список, могла бы принять произвольный объект и просто перенести его в список (если это уже не список). Так в этом случае я проверяю на тип - для не осуществления чего-либо - просто, потому что я хочу, чтобы функция была гибка в том, как это используется.