Отключить утверждения в Python

Как отключить утверждения в Python?

То есть, если утверждение терпит неудачу, я не хочу, чтобы он выдавал AssertionError , но продолжал идти.

Как мне это сделать?

    6 Solutions collect form web for “Отключить утверждения в Python”

    Как отключить утверждения в Python?

    Существует несколько подходов, которые влияют на один процесс, среду или одну строку кода.

    Я демонстрирую каждый.

    Для всего процесса

    Использование флага -O (капитал O) отключает все утверждения в процессе.

    Например:

     $ python -Oc "assert False" $ python -c "assert False" Traceback (most recent call last): File "<string>", line 1, in <module> AssertionError 

    Для окружающей среды

    Вы также можете использовать переменную среды, чтобы установить этот флаг.

    Это повлияет на каждый процесс, который использует или наследует среду.

    Например, в Windows настройка и очистка переменной среды:

     C:\>python -c "assert False" Traceback (most recent call last): File "<string>", line 1, in <module> AssertionError C:\>SET PYTHONOPTIMIZE=TRUE C:\>python -c "assert False" C:\>SET PYTHONOPTIMIZE= C:\>python -c "assert False" Traceback (most recent call last): File "<string>", line 1, in <module> AssertionError 

    То же самое в Unix (с использованием set и unset для соответствующей функциональности)

    Единая точка в коде

    Вы продолжаете свой вопрос:

    если утверждение терпит неудачу, я не хочу, чтобы он выдавал AssertionError, но продолжал идти.

    Если вы хотите, чтобы код не выполнялся, вы можете поймать ошибку утверждения:

     >>> try: ... assert False, "we know this fails" ... except AssertionError as e: ... print(repr(e)) ... AssertionError('we know this fails',) 

    и вы будете продолжать идти с того момента, как вы справились с AssertionError .

    Рекомендации

    Из assert документации :

    Утвердить утверждение следующим образом:

     assert expression #, optional_message 

    Эквивалентно

     if __debug__: if not expression: raise AssertionError #(optional_message) 

    А также,

    встроенная переменная __debug__ является True при нормальных обстоятельствах, False при запросе оптимизации (параметр командной строки -O ).

    Из документов использования:

    Включите основные оптимизации. Это изменяет расширение имени файла для скомпилированных (байткодов) файлов с .pyc на .pyo. См. Также PYTHONOPTIMIZE.

    а также

    PYTHONOPTIMIZE

    Если для него задана непустая строка, это эквивалентно заданию опции -O . Если задано целое число, это эквивалентно заданию -O несколько раз.

    Вызовите Python с флагом -O:

    test.py:

     assert(False) print 'Done' 

    Вывод:

     C:\temp\py>C:\Python26\python.exe test.py Traceback (most recent call last): File "test.py", line 1, in <module> assert(False) AssertionError C:\temp\py>C:\Python26\python.exe -O test.py Done 

    Оба из двух уже заданных ответов являются действительными (вызовите Python с -O или -OO в командной строке).

    Вот разница между ними:

    • -O Включить базовую оптимизацию. Это изменяет расширение имени файла для скомпилированных (байткодов) файлов с .pyc на .pyo.

    • -OO в дополнение к оптимизации -O .

    (Из документации Python )

    Использовать python -O :

     $ python -O >>> assert False >>> 

    Выполнение в оптимизированном режиме должно сделать это:

     python -OO module.py 

    Вы НЕ должны отключать (большинство) утверждения. Они улавливают непредвиденные ошибки, когда внимание в другом месте. См. Правило 5 в разделе «Власть десяти» .

    Вместо этого, охраняйте некоторые дорогие проверки утверждений чем-то вроде:

     import logging logger = logging.getLogger(__name__) if logger.getEffectiveLevel() < logging.DEBUG: ok = check_expensive_property() assert ok, 'Run !' 

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

     if foo_is_broken(): raise AssertionError('Foo is broken!') 
      Python - лучший язык программирования в мире.