17 ответов:
The
assertоператор существует почти в каждом языке программирования. Когда ты это сделаешь...assert condition... вы говорите программе проверить это условие и вызвать ошибку, если условие ложно.
в Python, это примерно эквивалентно этому:
if not condition: raise AssertionError()попробуйте в оболочке Python:
>>> assert True # nothing happens >>> assert False Traceback (most recent call last): File "<stdin>", line 1, in <module> AssertionErrorутверждения могут содержать необязательное сообщение, и вы можете отключить их при запуске интерпретатора.
To если утверждение не выполняется, выведите сообщение:
assert False, "Oh no! This assertion failed!"при работе
pythonв оптимизированном режиме, где__debug__иFalse, утверждения будут игнорироваться. Просто передайте-Oфлаг:python -O script.pyпосмотреть здесь для соответствующей документации.
следите за скобки. Как было указано выше, в Python 3,
assertеще заявление, так что по аналогии сprint(..), можно экстраполировать то же самое наassert(..)илиraise(..)но вы не должны.это важно, потому что:
assert(2 + 2 == 5, "Houston we've got a problem")не будет работать, в отличие от
assert 2 + 2 == 5, "Houston we've got a problem"Причина первая не будет работать, заключается в том, что
bool( (False, "Houston we've got a problem") )оценивает вTrue.в заявлении
assert(False), это просто избыточные скобки вокругFalse, которые оценивают их содержание. Но сassert(False,)скобки теперь являются кортежем, а непустой Кортеж имеет значениеTrueв логическом контексте.
как отметили другие ответы,
assertаналогично созданию исключения, если данное условие не выполняется. Важным отличием является то, что операторы assert игнорируются при компиляции кода с опцией оптимизация. Элемент документация говорит, чтоassert expressionможно лучше описать как эквивалентif __debug__: if not expression: raise AssertionErrorэто может быть полезно, если вы хотите тщательно протестировать свой код, а затем выпустить оптимизированную версию, когда вы счастливы, что ни один из ваших случаи утверждения терпят неудачу-когда оптимизация включена,
__debug__переменная становится ложной, и условия перестанут оцениваться. Эта функция также может поймать вас, если вы полагаетесь на утверждения и не понимаете, что они исчезли.
другие уже дали вам ссылки на документацию.
вы можете попробовать следующее в интерактивную оболочку:
>>> assert 5 > 2 >>> assert 2 > 5 Traceback (most recent call last): File "<string>", line 1, in <fragment> builtins.AssertionError:первый оператор ничего не делает, а второй вызывает исключение. Это первая подсказка: утверждения полезны для проверки условий, которые должны быть истинными в данной позиции вашего кода (обычно, начало (предварительные условия) и конец функции (постусловия)).
утверждения на самом деле сильно привязаны к программированию контракт, который является очень полезной инженерной практикой:
цель утверждения в Python-сообщить разработчикам о невозможно восстановить ошибки в программе.
утверждения не предназначены для сигнализации ожидаемых условий ошибки, таких как" файл не найден", где пользователь может предпринять корректирующие действия (или просто повторите попытку).
другой способ взглянуть на это-сказать, что утверждения внутренние самопроверки в коде. Они работают, объявляя некоторые условия как невозможно в вашей код. Если эти условия не выполняются, это означает, что в программе есть ошибка.
Если ваша программа не содержит ошибок, эти условия никогда не возникнут. Но если один из них тут произойдет сбой программы с ошибкой утверждения, сообщающей вам, какое именно" невозможное " условие было вызвано. Это значительно упрощает отслеживание и исправление ошибок в ваших программах.
вот резюме от учебник по утверждениям Python I написал:
оператор assert Python является средством отладки, а не механизмом для обработки ошибок во время выполнения. цель использования утверждений-позволить разработчикам быстрее найти вероятную первопричину ошибки. Ошибка утверждения никогда не должна возникать, если в вашей программе нет ошибки.
оператор assert имеет две формы.
простая форма,
assert <expression>, эквивалентнойif __debug__: if not <expression>: raise AssertionErrorрасширенная форма,
assert <expression1>, <expression2>, эквивалентнойif __debug__: if not <expression1>: raise AssertionError, <expression2>
утверждения-это систематический способ проверить, что внутреннее состояние программы соответствует ожиданиям программиста, с целью обнаружения ошибок. См. пример ниже.
>>> number = input('Enter a positive number:') Enter a positive number:-1 >>> assert (number > 0), 'Only positive numbers are allowed!' Traceback (most recent call last): File "<stdin>", line 1, in <module> AssertionError: Only positive numbers are allowed! >>>
из документов:
Assert statements are a convenient way to insert debugging assertions into a programздесь вы можете прочитать больше:http://docs.python.org/release/2.5.2/ref/assert.html
вот простой пример, сохраните это в файле (скажем b.py)
def chkassert(num): assert type(num) == int chkassert('a')и в результате, когда
$python b.pyTraceback (most recent call last): File "b.py", line 5, in <module> chkassert('a') File "b.py", line 2, in chkassert assert type(num) == int AssertionError
если заявление после утверждение верно, то программа продолжается , а если заявление после утверждать ложно, то программа выдает сообщение об ошибке. Просто.
например:
assert 1>0 #normal execution assert 0>1 #Traceback (most recent call last): #File "<pyshell#11>", line 1, in <module> #assert 0>1 #AssertionError
Если вы когда-нибудь хотите точно знать, что зарезервированная функция делает в python, введите
help(enter_keyword)убедитесь, что при вводе зарезервированного ключевого слова вы вводите его в виде строки.
Python assert это в основном средство отладки, которое тестирует условие для внутренней самоконтроля вашего кода. Assert делает отладку очень простой, когда ваш код попадает в невозможные крайние случаи. Утверждают, что проверяют эти невозможные случаи.
допустим, есть функция для расчета цены товара после скидки:
def calculate_discount(price, discount): discounted_price = price - [discount*price] assert 0 <= discounted_price <= price return discounted_priceздесь discounted_price никогда не может быть меньше 0 и больше фактической цены. Итак, в случае нарушения вышеуказанного условия утверждаем вызывает ошибку утверждения, которая помогает разработчику определить, что произошло что-то невозможное.
надеюсь, что это помогает :)
мое краткое объяснение:
assertподнимаетAssertionErrorесли выражение ложно, в противном случае просто продолжает код, и если есть запятая, что бы это ни было, это будетAssertionError: whatever after comma, и код такой:raise AssertionError(whatever after comma)связанный учебник об этом:
https://www.tutorialspoint.com/python/assertions_in_python.htm
def getUser(self, id, Email): user_key = id and id or Email assert user_keyможет использоваться для обеспечения передачи параметров в вызове функции.
: утверждение выражения [, аргументы] Когда заявлять о встречах с заявлением,в Python вычисляет выражение.Если оператор не является истинным, возникает исключение (assertionError). Если утверждение не выполняется, Python использует ArgumentExpression в качестве аргумента для AssertionError. Исключения AssertionError могут быть пойманы и обработаны как любое другое исключение с помощью оператора try-except, но если они не обработаны, они завершат программу и создадут отладочные сообщения. Пример:
def KelvinToFahrenheit(Temperature): assert (Temperature >= 0),"Colder than absolute zero!" return ((Temperature-273)*1.8)+32 print KelvinToFahrenheit(273) print int(KelvinToFahrenheit(505.78)) print KelvinToFahrenheit(-5)когда приведенный выше код выполняется, он дает следующий результат:
32.0 451 Traceback (most recent call last): File "test.py", line 9, in <module> print KelvinToFahrenheit(-5) File "test.py", line 4, in KelvinToFahrenheit assert (Temperature >= 0),"Colder than absolute zero!" AssertionError: Colder than absolute zero!
>>>this_is_very_complex_function_result = 9 >>>c = this_is_very_complex_function_result >>>test_us = (c < 4) >>> #first we try without assert >>>if test_us == True: print("YES! I am right!") else: print("I am Wrong, but the program still RUNS!") I am Wrong, but the program still RUNS! >>> #now we try with assert >>> assert test_us Traceback (most recent call last): File "<pyshell#52>", line 1, in <module> assert test_us AssertionError >>>
в основном ключевое слово assert означает, что если условие не истинно, то оно через assertionerror еще продолжается, например, в python.
код-1
a=5 b=6 assert a==bвыход:
assert a==b AssertionErrorкод-2
a=5 b=5 assert a==bвыход:
Process finished with exit code 0
Comments