Каково использование «assert» в Python?

Я читал некоторый исходный код, и в нескольких местах я видел использование assert .

Что это значит? Каково его использование?

  • Как вычислить контрольную сумму пакета без его отправки?
  • Изображение PPM для искусства ASCII в Python
  • Добавить отсутствующие даты в pandas dataframe
  • Python request.get (url) возвращает пустой контент
  • Perl-эквивалент (Python-) понимания
  • Кросс-платформенный набор инструментов gui для развертывания приложений Python
  • Python: присвоить значение, если отсутствует
  • Исключение BadStatusLine, возникающее при возврате ответа с сервера в Python 3
  • 16 Solutions collect form web for “Каково использование «assert» в Python?”

    Утверждение 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 

    Утверждения могут включать необязательное сообщение, и вы можете отключить их, когда вы закончите отладку. См. Здесь соответствующую документацию.

    Следите за круглыми скобками. Как было указано выше, в 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__ – когда оптимизация __debug__ переменная __debug__ становится False, и условия перестанут оцениваться. Эта функция также может вас поймать, если вы полагаетесь на утверждения и не понимаете, что они исчезли.

    Другие уже предоставили вам ссылки на документацию.

    Вы можете попробовать следующее в интерактивной оболочке:

     >>> assert 5 > 2 >>> assert 2 > 5 Traceback (most recent call last): File "<string>", line 1, in <fragment> builtins.AssertionError: 

    Первый оператор ничего не делает, а второй вызывает исключение. Это первый намек: утверждения полезны для проверки условий, которые должны быть истинными в заданной позиции вашего кода (обычно это начало (предварительные условия) и конец функции (постусловия)).

    Утверждения на самом деле очень привязаны к программированию по контракту, что является очень полезной инженерной практикой:

    http://en.wikipedia.org/wiki/Design_by_contract .

    Утверждение имеет две формы.

    Простая форма, 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

    Целью утверждения в Python является информирование разработчиков о неисправимых ошибках в программе.

    Утверждения не предназначены для сигнализации ожидаемых условий ошибки, таких как «файл не найден», когда пользователь может предпринять корректирующие действия (или просто повторить попытку).

    Другой способ взглянуть на это – сказать, что утверждения – это внутренние самопроверки в вашем коде. Они работают, объявив некоторые условия невозможными в вашем коде. Если эти условия не выполняются, это означает, что в программе есть ошибка.

    Если ваша программа без ошибок, эти условия никогда не будут происходить. Но если один из них произойдет, программа выйдет из строя с ошибкой утверждения, которая сообщит вам, какое именно «невозможное» условие было вызвано. Это значительно облегчает отслеживание и исправление ошибок в ваших программах.

    Вот резюме из учебника по утверждениям Python, который я написал:

    Утверждение утверждения Python – это отладочная помощь, а не механизм обработки ошибок во время выполнения. Цель использования утверждений – позволить разработчикам быстрее найти вероятную основную причину ошибки. Ошибка утверждения никогда не должна возникать, если в вашей программе нет ошибки.

    Вот простой пример, сохраните это в файле (скажем, b.py)

     def chkassert(num): assert type(num) == int chkassert('a') 

    и результат, когда $python b.py

     Traceback (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 

    Если вы когда-нибудь захотите точно знать, что зарезервировала функция в python, введите help(enter_keyword)

    Убедитесь, что вы вводите зарезервированное ключевое слово, которое вы вводите в виде строки.

    если утверждение after assert истинно, то программа продолжается, но если инструкция после утверждения является ложной, то программа выдает ошибку. Просто как тот.

    например:

     assert 1>0 #normal execution assert 0>1 #Traceback (most recent call last): #File "<pyshell#11>", line 1, in <module> #assert 0>1 #AssertionError 
     def getUser(self, id, Email): user_key = id and id or Email assert user_key 

    Может использоваться для обеспечения передачи параметров в вызове функции.

    format: assert Expression [, arguments] Когда assert встречает оператор, 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 >>> 

    Ярлыки для grok 'assert'.

    assert выполняет функцию контрольной точки,

    Если он функционирует хорошо, продолжайте;

    в противном случае повысите предупреждение.

    В принципе, значение ключевого слова assert заключается в том, что если условие не является истинным, то через assertionerror else оно продолжается, например, в 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 
    Interesting Posts

    Использовать код учебника LSTM для предсказания следующего слова в предложении?

    Django: использование <select multiple> и POST

    Как сгруппировать список кортежей / объектов с помощью аналогичного индекса / атрибута в python?

    Использовать итератор как имя переменной в цикле питона

    Функция рекурсии в Python

    Какой хороший способ заменить международных персонажей их базовыми латинскими аналогами с помощью Python?

    Извлечение информации с сайтов на основе AJAX с использованием Python

    Как превратить блок данных в ряд списков?

    Python-Oracle, проходящий в параметре Cursor Out

    Почему функция «len» не унаследована словарями и списками в Python

    Передача информации из javascript в приложение django и обратно

    Как «заблокировать клавиатуру», чтобы предотвратить отправку других нажатий на X11 / Linux / Gnome?

    Как проверить, является ли строка допустимым идентификатором python? включая проверку ключевых слов?

    Как обрабатывать всплывающее окно проверки подлинности Windows в selenium с помощью python (плюс java)

    Как установить ipton qtconsole с pyenv (Python версии 3.4.2)

    Python - лучший язык программирования в мире.