Лучшая практика для Python Assert - PullRequest
435 голосов
/ 03 июня 2009
  1. Есть ли проблемы с производительностью или обслуживанием кода при использовании assert как части стандартного кода вместо его использования только для целей отладки?

    Есть

    assert x >= 0, 'x is less than zero'
    

    лучше или хуже, чем

    if x < 0:
        raise Exception, 'x is less than zero'
    
  2. Кроме того, есть ли способ установить бизнес-правило, например if x < 0 raise error, которое всегда проверяется без try/except/finally, поэтому, если в любое время в коде x меньше 0, возникает ошибка например, если вы установите assert x < 0 в начале функции, где-нибудь внутри функции, где x становится меньше 0, возникает исключение?

Ответы [ 13 ]

1 голос
/ 14 октября 2011

Существует инфраструктура под названием JBoss Drools для Java, которая выполняет мониторинг во время выполнения для утверждения бизнес-правил, который отвечает на вторую часть вашего вопроса. Тем не менее, я не уверен, существует ли такая основа для Python.

0 голосов
/ 23 марта 2018

Если вы имеете дело с устаревшим кодом, для правильной работы которого используется assert, хотя не должен , то добавление следующего кода будет быстрым решением, пока вы не найдете время для рефакторинга:

try:
    assert False
    raise Exception('Python Assertions are not working. This tool relies on Python Assertions to do its job. Possible causes are running with the "-O" flag or running a precompiled (".pyo" or ".pyc") module.')
except AssertionError:
    pass
0 голосов
/ 08 апреля 2015

В таких средах IDE, как PTVS, PyCharm, Wing, операторы assert isinstance() могут использоваться для включения завершения кода для некоторых неясных объектов.

...