Python에서 어설 션 비활성화
Python에서 어설 션을 비활성화하려면 어떻게해야합니까?
즉, 어설 션이 실패하면를 던지는 것이 AssertionError
아니라 계속 진행하기 를 원합니다 .
어떻게하나요?
Python에서 어설 션을 비활성화하려면 어떻게해야합니까?
단일 프로세스, 환경 또는 한 줄의 코드에 영향을 미치는 여러 접근 방식이 있습니다.
각각을 시연합니다.
전체 과정
은 Using -O
플래그 (자본 O은) 프로세스의 모든 어설 문을 사용할 수 없습니다.
예를 들면 :
$ python -Oc "assert False"
$ python -c "assert False"
Traceback (most recent call last):
File "<string>", line 1, in <module>
AssertionError
비활성화하면 다음과 같은 표현식도 실행되지 않습니다.
$ python -Oc "assert 1/0"
$ python -c "assert 1/0"
Traceback (most recent call last):
File "<string>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
환경을 위해
환경 변수를 사용하여이 플래그를 설정할 수도 있습니다.
이것은 환경을 사용하거나 상속하는 모든 프로세스에 영향을 미칩니다.
예를 들어 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를 던지는 대신 계속 진행하기를 원합니다.
실행에 실패한 코드를 원하는 경우 제어 흐름이 어설 션에 도달하지 않는지 확인할 수 있습니다. 예를 들면 다음과 같습니다.
if False:
assert False, "we know this fails, but we don't get here"
또는 어설 션 오류를 잡을 수 있습니다.
try:
assert False, "this code runs, fails, and the exception is caught"
except AssertionError as e:
print(repr(e))
인쇄 :
AssertionError('this code runs, fails, and the exception is caught')
그리고 당신은 당신이 AssertionError
.
참고 문헌
다음과 같은 assert 문 :
assert expression #, optional_message
다음과 같습니다.
if __debug__: if not expression: raise AssertionError #(optional_message)
과,
내장 변수
__debug__
는 최적화가 요청 될 때True
정상적인 상황에 있습니다False
(명령 행 옵션-O
).
그리고 더
에 대한 할당
__debug__
은 불법입니다. 내장 변수의 값은 인터프리터가 시작될 때 결정됩니다.
사용 문서에서 :
Turn on basic optimizations. This changes the filename extension for compiled (bytecode) files from .pyc to .pyo. See also PYTHONOPTIMIZE.
and
If this is set to a non-empty string it is equivalent to specifying the
-O
option. If set to an integer, it is equivalent to specifying-O
multiple times.
Call Python with the -O flag:
test.py:
assert(False)
print 'Done'
Output:
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
Both of the two answers already given are valid (call Python with either -O
or -OO
on the command line).
Here is the difference between them:
-O
Turn on basic optimizations. This changes the filename extension for compiled (bytecode) files from .pyc to .pyo.-OO
Discard docstrings in addition to the-O
optimizations.
(From the Python documentation)
Use python -O
:
$ python -O
>>> assert False
>>>
You should NOT disable (most) assertions. They catch unanticipated errors when attention is elsewhere. See Rule 5 in "The power of ten".
Instead, guard some expensive assertion checks by something like:
import logging
logger = logging.getLogger(__name__)
if logger.getEffectiveLevel() < logging.DEBUG:
ok = check_expensive_property()
assert ok, 'Run !'
One way to keep important assertions, and allow assert
statements to be optimized away is by raising them within a selection statement:
if foo_is_broken():
raise AssertionError('Foo is broken!')
Running in optimized mode should do it:
python -OO module.py
참고URL : https://stackoverflow.com/questions/1273211/disable-assertions-in-python
'developer tip' 카테고리의 다른 글
파이썬에서 파일에 문자열을 어떻게 래핑합니까? (0) | 2020.10.24 |
---|---|
MySQL이 유효한 자동 증가 값으로 0을 사용하도록 강제하는 방법 (0) | 2020.10.24 |
활동에 배경 이미지를 추가하는 방법은 무엇입니까? (0) | 2020.10.24 |
Magit에서 파일 기록을 보시겠습니까? (0) | 2020.10.24 |
정규식과 슬래시 일치 (0) | 2020.10.24 |