6 ответов:
Как отключить утверждения в Python?
существует несколько подходов, которые влияют на один процесс, среду или одну строку кода.
я демонстрирую каждый.
для всего процесса
С помощью
-Oflag (capital O) отключает все операторы assert в процессе.например:
$ 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 expression #, optional_messageэквивалентно
if __debug__: if not expression: raise AssertionError #(optional_message)и
встроенная переменная
__debug__иTrueпри нормальных обстоятельствах,Falseпри запросе оптимизации (опция командной строки-O).из документов по использованию:
включите основные оптимизации. Это изменяет расширение имени файла для скомпилированных (байт-код) файлов .пык к.Пе. См. также PYTHONOPTIMIZE.
и
если это установлено в непустую строку, это эквивалентно для указания . Если задано целое число, оно эквивалентно указание
-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включите основные оптимизации. Это изменяет расширение файла для скомпилированных (байт-код) файлов .пык к.Пе.
-OOотбросить docstrings до-Oпроцессы оптимизации.(от документация Python)
вы должны не отключить (всего) утверждения. Они ловят непредвиденные ошибки, когда внимание находится в другом месте. См. Правило 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!')
Comments