source

Python에서 "assert"의 용도는 무엇입니까?

manysource 2022. 11. 13. 19:33

Python에서 "assert"의 용도는 무엇입니까?

무인 does does 가 뭐죠?assert열? 떻? ??

assert스테이트먼트는 거의 모든 프로그래밍 언어로 존재합니다.주로 다음 두 가지 용도가 있습니다.

  1. 다른 작업이 실패했을 때 나중에가 아니라 원인이 분명한 프로그램에서 문제를 조기에 발견하는 데 도움이 됩니다.Python의 "Python", "Python"이 발생하기 전에 할 수 .Exception일찍 잡히지 않으면.

  2. 있는 다른 개발자는 코드를 .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

아사션에는 옵션메시지를 포함할 수 있으며 인터프리터를 실행할 때 메시지를 디세블로 할 수 있습니다.

어설션이 실패했을 때 메시지를 인쇄하려면:

assert False, "Oh no! This assertion failed!"

호출에 괄호 사용 안 함assert은 진술이다것은진진 진진진다다 하면.assert(condition, message) 해서 하다'를 하게 .assert a (condition, message) parametertuple as first parameter.tuple first 。

하는 는, 「」를 실행하고 있는 .python mode(최적화 모드)의, 「」는 「」, 「」__debug__False 해 주세요.-O 삭제:

python -O script.py

관련 문서는 여기를 참조하십시오.

괄호 조심하세요.다른 답변에서 지적된 바와 같이 파이썬 3에서는 여전히 문장이기 때문에 다음과 같이 유추할 수 있습니다.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.

세 in 。assert(False) '한 괄호'로 둘러싸여 있습니다.False내용에 따라 평가합니다. ,가 있으면assert(False,)는 이제, 비어있지 은 '태플'로 됩니다.True부울 콘텍스트에서 사용합니다.

다른 답변에서도 언급했듯이assert특정 조건이 참이 아닌 경우 예외를 두는 것과 비슷합니다.중요한 차이점은 assert 문이 optimization 옵션을 사용하여 코드를 컴파일하면 무시된다는 것입니다.문서에는 이라고 되어 있다assert expression와 동등하다고 더 잘 설명할 수 있다

if __debug__:
   if not expression: raise AssertionError

하고, 모두 하지 않는 스러울 때 된 버전을 때 있을 는, 「 」가 유효하게 .「 」, 「 」, 「 」,__debug__거짓.이 기능은 단언에 의존하고 있지만, 그것이 사라졌다는 것을 깨닫지 못하는 경우에도 눈에 띄지 않을 수 있습니다.

Python에서의 어설션의 목적은 프로그램의 복구할 수 없는 오류에 대해 개발자에게 알리는 것입니다.

어설션은 사용자가 수정 작업을 수행할 수 있는 "file not found"(파일을 찾을 수 없음)와 같은 예상 오류 조건을 신호로 전달하기 위한 것이 아닙니다.

또 다른 관점에서 보면, 주장은 코드의 내부적인 자기 확인이라고 말하는 것입니다.코드 내에서 불가능한 조건을 선언함으로써 동작합니다.이러한 조건이 충족되지 않으면 프로그램에 버그가 있음을 의미합니다.

프로그램에 버그가 없는 경우는, 이러한 상황은 발생하지 않습니다.그러나 이들 하나가 발생하면 프로그램이 크래시하여 정확히 어떤 "불가능" 상태가 트리거되었는지 알려주는 어설션 오류가 발생합니다.이것에 의해, 프로그램의 버그를 추적해 수정하는 것이 훨씬 쉬워집니다.

다음은 제가 쓴 Python의 주장에 대한 튜토리얼의 요약입니다.

Python의 assert 문은 런타임 오류를 처리하기 위한 메커니즘이 아닌 디버깅 보조 도구입니다.어설션을 사용하는 목적은 개발자들이 버그의 가능한 근본 원인을 더 빨리 찾을 수 있도록 하는 것입니다.프로그램에 버그가 없는 한 어설션 에러는 발생하지 않습니다.

다른 사용자가 이미 문서 링크를 제공했습니다.

인터랙티브셸에서 다음을 시도할 수 있습니다.

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

첫 번째 문장은 아무것도 하지 않고 두 번째 문장은 예외를 발생시킵니다.이것이 첫 번째 힌트입니다.assert는 코드의 특정 위치에서 참이어야 하는 조건(보통 함수의 시작(전제조건)과 끝(후제조건))을 체크하는 데 유용합니다.

Asserts는 실제로 계약에 의한 프로그래밍과 매우 밀접하게 관련되어 있습니다.이것은 매우 유용한 엔지니어링 프랙티스입니다.

http://en.wikipedia.org/wiki/Design_by_contract 를 참조해 주세요.

문서로부터:

아사트문은 프로그램에 디버깅 아사션을 삽입하는 편리한 방법입니다.

자세한 것은, http://docs.python.org/release/2.5.2/ref/assert.html 를 참조해 주세요.

assert 스테이트먼트에는 두 가지 형식이 있습니다.

형식인 '아예'는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!
>>> 

다음은 간단한 예를 제시하겠습니다.파일에 저장합니다(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

C2 Wiki에 요약되어 있는 바와 같이:

어설션은 프로그램의 특정 지점에 있는 부울식이며, 프로그램에 버그가 없는이 됩니다.

'어울리지 않다'를 사용할 수 요.assert특정 프로그램 포인트의 코드에 대한 이해를 문서화합니다.예를 들어 입력(전제조건), 프로그램 상태(불변) 또는 출력(후제조건)에 대한 가정 또는 보증을 문서화할 수 있습니다.

어설션이 실패했을 경우, 이 경고는 프로그램을 작성할 때 프로그램에 대한 인식이 잘못되어 버그가 포함되어 있을 가능성이 있다는 경고입니다.

자세한 내용은 John Reger가 Python에 적용되는 Use of Assertions에 관한 훌륭한 블로그 투고를 게재하고 있습니다.assert이치노

assert스테이트먼트는 거의 모든 프로그래밍 언어로 존재합니다.다른 작업의 부작용으로 나중에 발견하는 것이 아니라 원인이 분명한 프로그램에서 문제를 조기에 발견하는 데 도움이 됩니다.은 ★★★★★★★★★★★★★★★★★★★★★★★★★★.True★★★★★★ 。

다음과 같은 작업을 수행할 때:

assert condition

프로그램에 해당 조건을 테스트하고 거짓일 경우 즉시 오류를 발생시키도록 지시합니다.

Python에서 expression은 다음과 같습니다.

if __debug__:
    if not <expression>: raise AssertionError

확장 표현을 사용하여 옵션메시지를 전달할 수 있습니다.

if __debug__:
    if not (expression_1): raise AssertionError(expression_2)

Python 인터프리터로 시험해 보세요.

>>> assert True # Nothing happens because the condition returns a True value.
>>> assert False # A traceback is triggered because this evaluation did not yield an expected value.
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError

이 몇 가지 . 주로 전 주의할 점이 .주로, 이 기능을 사용하기 전에, 이 기능을 사용하는 유저에게 있어서,assert ★★★★★★★★★★★★★★★★★」if★★★★★★★★★★★★★의 목적assert에러를 바이패스 하는 대체 방법을 사용하지 않고, 프로그램이 조건을 검증해, 프로그램을 즉시 정지할 필요가 있는 값을 반환하는 경우가 있습니다.

1. 괄호

★★★★★★★★★★★★★★★★★★★★★★★★★★」assertstatement에는 두 가지 조건이 있습니다.따라서 괄호를 사용하여 명확한 조언을 위해 괄호를 사용하지 마십시오.다음과 같은 경우:

assert (condition, message)

예:

>>> assert (1==2, 1==1)
<stdin>:1: SyntaxWarning: assertion is always true, perhaps remove parentheses?

해서 '하다'를 하게 .assert a (condition, message)이것은 첫 번째 파라미터로서 태플을 나타냅니다.이것은 Python에서 비어 있지 않은 태플이 항상이기 때문에 발생합니다.단, 문제없이 개별적으로 할 수 있습니다.

assert (condition), "message"

예:

>>> assert (1==2), ("This condition returns a %s value.") % "False"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError: This condition returns a False value.

2. 디버깅 목적

assert실생활에서 사용되는 예를 들어보자.

* 프로그램이 사용자가 입력한 각 매개 변수를 제어하는 경향이 있는 경우:

def loremipsum(**kwargs):
    kwargs.pop('bar') # return 0 if "bar" isn't in parameter
    kwargs.setdefault('foo', type(self)) # returns `type(self)` value by default
    assert (len(kwargs) == 0), "unrecognized parameter passed in %s" % ', '.join(kwargs.keys())

* 특정 방정식의 계수 또는 상수로 0 또는 비양수인 경우 수학에 대한 다른 경우가 있습니다.

def discount(item, percent):
    price = int(item['price'] * (1.0 - percent))
    print(price)
    assert (0 <= price <= item['price']),\
            "Discounted prices cannot be lower than 0 "\
            "and they cannot be higher than the original price."

    return price

* 또는 부울 구현의 간단한 예:

def true(a, b):
    assert (a == b), "False"
    return 1

def false(a, b):
    assert (a != b), "True"
    return 0

3. 데이터 처리 또는 데이터 검증

한 것은 '의식'에하지 않는 입니다.assert 또는 하는 스테이트먼트입니다.이 스테이트먼트는 Python 시 Python에서 수 입니다.-O ★★★★★★★★★★★★★★★★★」-OOflag:, 2을하거나 flag: 1, 2, 0(디폴트로는)을 .또는PYTHONOPTIMIZE환경 변수입니다.

값 1:

* 단언은 비활성화되어 있습니다.

* 바이트코드 파일은 다음 확장자를 사용하여 생성됩니다..pyc;

*sys.flags.optimize되어 있다.True

__debug__로 설정되어 있다.False;

2: 하나 이상의 데이터를 비활성화합니다.

* docstring은 비활성화되어 있습니다.

때문에 '를 사용하여assert예상되는 데이터를 검증하는 것은 매우 위험하며, 이는 일부 보안 문제에 대해서도 마찬가지입니다., 저는 당신에게 할 만한 것이 있습니다.raise AuthError as. 로서 ,,,,,,,,,,,,assert는 사용자가 직접 대화하지 않는 라이브러리 또는 모듈의 프로그래머에 의해 일반적으로 사용됩니다.

assert 후 스테이트먼트가 참이면 프로그램이 계속되지만 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

Pycharm을 assert isinstance오브젝트 유형을 선언하기 위해 코딩하는 동안 상위 오브젝트의 메서드와 속성에 액세스할 수 있으며 자동으로 완료됩니다.

를 들어, 이렇게 하면요.self.object1.object2는 입니다.MyClass★★★★★★ 。

import MyClasss

def code_it(self):
    testObject = self.object1.object2 # at this point, program doesn't know that testObject  is a MyClass object yet
    assert isinstance(testObject , MyClasss) # now the program knows testObject is a MyClass object
    testObject.do_it() # from this point on, PyCharm will be able to auto-complete when you are working on testObject

python에서 알고 python을 합니다.help(enter_keyword)

예약된 키워드를 입력할 경우 문자열로 입력해야 합니다.

Python assert는 기본적으로 코드의 내부 셀프 체크를 위한 조건을 테스트하는 디버깅 보조 도구입니다.Assert는 코드가 불가능한 엣지 케이스에 들어갔을 때 디버깅을 매우 쉽게 합니다.그 불가능한 사건들을 확인하라.

할인 후 상품 가격을 계산하는 기능이 있다고 합시다.

def calculate_discount(price, discount):
    discounted_price = price - [discount*price]
    assert 0 <= discounted_price <= price
    return discounted_price

여기서 discounted_price는 0보다 작거나 실제 가격보다 클 수 없습니다.따라서 위의 조건을 위반했을 경우 Assertion Error가 발생하므로 개발자는 불가능한 일이 발생했음을 확인할 수 있습니다.

도움이 되었으면 좋겠다:)

간단한 설명은 다음과 같습니다.

  • assertAssertionErrorfalse, false, false가 .그리고 쉼표가 있으면 무엇이든 됩니다.AssertionError: whatever after comma' 코드쓰다' 코드쓰다'raise AssertionError(whatever after comma)

이에 대한 관련 튜토리얼:

https://www.tutorialspoint.com/python/assertions_in_python.htm

다른 답변에도 있듯이assert문장은 특정 지점의 프로그램 상태를 확인하는 데 사용됩니다.

메시지나 련, 련, 련, 호, 호, 호, 호, 괄, 괄, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i-O 및 option.__debug__일정한.또한 매뉴얼에서 직접 정보를 확인합니다.저는 당신의 질문에 초점을 맞출 것입니다.assert정확히 , 언제(그리고 언제), 언제(안 될 때), 언제(안 될 때)를 사용하면 assert

assert스테이트먼트는 프로그램 디버깅에는 유용하지만 사용자 입력을 확인하는 것은 권장되지 않습니다.나는 다음과 같은 경험 규칙을 사용한다: 이런 이 일어나서는 안 되는 상황을 감지하기 위한 주장을 계속한다.패스워드가 너무 짧은 등 사용자 입력이 올바르지 않을 수 있지만, 이는 발생해서는 안 되는 경우가 아닙니다.의 지름이 반지름의 두 배보다 크지 않은 경우에는 이러한 일이 발생하지 않아야 합니다.

제 생각에 가장 흥미로운 사용법은assertB에 의해 기술된 계약에 의한 프로그래밍에서 영감을 얻었다.[오브젝트 지향 소프트웨어 구축](https://www.eiffel.org/doc/eiffel/Object-Oriented_Software_Construction%2C_2nd_Edition)의 Meyer를 [Eiffel 프로그래밍 언어](https://en.wikipedia.org/wiki/Eiffel_(programming_language)))로 구현했습니다.계약으로 프로그래밍을 완전히 에뮬레이트할 수는 없습니다.assert하지만 그 취지를 유지하는 건 흥미롭죠

여기 예가 있어요. 쓰다 요, 이렇게 가정해보세요.head([(] [] the head기능합니다.http://www.zvon.org/other/haskell/Outputprelude/head_f.html))지정된 사양은 "목록이 비어 있지 않으면 목록의 첫 번째 항목을 반환하십시오."입니다.다음의 실장을 확인해 주세요.

>>> def head1(xs): return xs[0]

그리고.

>>> def head2(xs):
...     if len(xs) > 0:
...         return xs[0]
...     else:
...         return None

를 클릭합니다(Yes, this can be written as return xs[0] if xs else None, but that's not the point).

목록이 비어 있지 않으면 두 함수의 결과는 동일하며 이 결과는 정확합니다.

>>> head1([1, 2, 3]) == head2([1, 2, 3]) == 1
True

따라서, 양쪽의 실장이 올바르기를 바랍니다.빈 목록의 제목 항목을 가져오려고 하면 다음과 같이 달라집니다.

>>> head1([])
Traceback (most recent call last):
...
IndexError: list index out of range

단,

>>> head2([]) is None
True

어느 누구도 빈 목록을 이러한 기능에 전달해서는 안 되기 때문에 두 구현 모두 정확합니다(사양에서 제외).그건 잘못된 전화인데, 그런 전화를 하면 무슨 일이든 일어날 수 있어요.한 함수는 예외를 발생시키고 다른 함수는 특수 값을 반환합니다.가장 중요한 것은 이 행동에 의존할 없다는 것입니다.한다면xs 하면 됩니다.이거는 동작합니다.

print(head2(xs))

이 경우 프로그램이 크래시됩니다.

print(head1(xs))

예기치 않은 주장을 함수에 전가할 때 깜짝 놀라지 않기 위해 알고 싶습니다.즉, 다음과 같습니다.사양이 아니라 구현에 따라 다르기 때문에 관찰 가능한 동작이 신뢰할 수 없는 경우를 알고 싶습니다.물론 스펙은 읽을 수 있지만 프로그래머가 항상 문서를 주의 깊게 읽는 것은 아닙니다.

때 빈 수 있는 합니다.예를 들어, 빈 리스트를 다음에 건네주는 등의 방법으로 사양을 위반했을 때head올바른 (사양에 준거한) 프로그램을 작성하는 것은 큰 도움이 됩니다.서부터가 바로 이 부분이에요.assert현장에 들어갑니다.

>>> def head1(xs):
...     assert len(xs) > 0, "The list must not be empty"
...     return xs[0]

그리고.

>>> def head2(xs):
...     assert len(xs) > 0, "The list must not be empty"
...     if len(xs) > 0:
...         return xs[0]
...     else:
...         return None

여기에서는, 다음과 같은 것이 있습니다.

>>> head1([])
Traceback (most recent call last):
...
AssertionError: The list must not be empty

그리고:

>>> head2([])
Traceback (most recent call last):
...
AssertionError: The list must not be empty

:head1AssertionError 가 , 「」입니다.IndexError ★★★★★★★★★★★★★★★★★★★★★★★★★★★.AssertionError는 런타임 에러가 아닙니다.사양 위반을 나타냅니다.경고를 하려고 했는데 오류가 나네요.다행히 체크는 디세블로 할 수 있습니다.-O(서양속담, 친구속담)을 사용법내 프로그램이 블랙홀을 통과하는 우주선에 박혀있다고 상상해봐.나는 어설션을 무효로 하고 프로그램이 가능한 한 오래 크래시하지 않을 만큼 충분히 강력하기를 바란다.

에 관한 이었습니다. 를 들어, 이 예에서는 '전제조건'을 할 수 .assert사후 조건(반환값 및/또는 상태)과 불변량(클래스 상태)을 확인합니다.은 " " "로 체크합니다.assert번거로울 수 있습니다.

  • 사후 조건의 경우 반환값을 변수에 할당해야 하며 메서드를 처리하는 경우 객체의 초기 상태를 저장해야 합니다.
  • 불변의 경우 메서드 호출 전후의 상태를 확인해야 합니다.

에펠처럼 세련된 것은 없겠지만, 프로그램의 전반적인 질을 향상시킬 수는 있습니다.


「」는assert스테이트먼트는, 이러한 일이 있어서는 안 되는 상황을 검출하기 위한 편리한 방법입니다.사양 위반(빈 목록 전달 등)head)는 이런 일이 있어서는 안 되는 퍼스트 클래스입니다.그 때문에, 한편으로assert스테이트먼트를 사용하여 예기치 않은 상황을 검출할 수 있습니다.이것은, 사양이 충족되고 있는 것을 확인하는 특권 방법입니다. 하면'assert규격을 나타내는 코드로의 스테이트먼트는, 잘못된 인수, 잘못된 반환치, 클래스의 잘못된 상태가 보고되기 때문에, 프로그램의 품질을 향상시켰다고 생각할 수 있습니다.

assert가 무슨 뜻입니까?어떻게 사용하나요?

여기에는 훌륭한 답이 있지만, 질문의 두 번째 부분에는 그렇지 않습니다.다년간의 실무 경험에도 불구하고, 나는 최근에야 단언의 목적을 이해했다.

은 이미 했습니다.assert이치노사용 방법은 다음과 같습니다.

assert condition, "error message"

괄호를 사용하지 마십시오. assert는 함수가 아닌 키워드입니다.

assert (condition, "error message")  # wrong: this never fails!

assert 사용 방법에 대한 좋은 설명은 http://wiki.c2.com/?WhatAreAssentions의 포인트assert코드에 불변성을 선언하는 것입니다.불변이란 코드에 버그가 없는 한 위반해서는 안 되는 조건입니다.실행 가능한 문서라고 생각하시면 됩니다.이것은 오브젝트 지향 프로그래밍이 외부로부터 코드를 캡슐화하는 방법과 밀접하게 관련되어 있습니다.

개발자에게 .코드에 코멘트와 같은 어설트를 다른 개발자에게 사용해야 합니다.가 됩니다!, 댓글보다.코멘트'는 실제로 디버깅모드로 체크됩니다.아사트가 제거되어도 프로그램이 올바르게 동작하지 않을 것으로 예상할 수 없는 경우는, 잘못 사용하고 있는 것입니다.Python은 Python, Python은 합니다.assert으로 했을 (s(s))python -O) 。따라서 그들이 거기에 있을 거라고 기대하지 마세요.특히 사용자 입력을 검증하기 위해 assert를 사용하지 마십시오.대신 예외를 발생시킵니다.

여기 이 모든 것을 하나로 묶을 좋은 예가 있다.를 들어, 코드 특별한 .PositiveInt왜그 그? ???양의 정수를 모수로 사용하는 함수는 많습니다.「」를 사용해 .PositiveInt당신의 코드에서는 입력이 유효한지 모든 함수에서 반복해서 확인할 필요가 없습니다.이 보증되어 있다.PositiveInt.

class PositiveInt(int):
    # int is immutable, so we have to override new and not init
    def __new__(cls, value):
        if value <= 0:
            raise ValueError(f"{value} is not positive")
        assert value > 0, "value must be positive"
        return super(PositiveInt, cls).__new__(cls, value)   

처럼 저는 '보다', '보다', '보다', '다'를 둘 다 .if ...: raise ...입력 검증assert기능을 종료합니다.이것은 불필요한 것처럼 보이지만, 단지 이 사소한 예에 불과합니다!함수가 조금 더 길고 복잡하기 때문에 입력의 유효성을 제대로 검사하지 못할 수 있습니다.마지막에 있는 어사트는 검증 코드의 버그가 검출되고 있는 것을 확인할 수 있습니다., 다른 에게는, 단순한, .

요약: 사용assert에나 수 있어아아아!가 될 를 할 수 .python -O.

주장은 우리 프로그램에서 사실을 자신 있게 진술하는 진술입니다.

: 문: :assert <condition> ★★★★★★★★★★★★★★★★★」assert <condition>,<error message>

항상 참이어야 하는 조건/표현이 있습니다.false일 false는assert이 에러 메시지는, 「이러다」라고 하는 것입니다.AssertionError그래서 당신의 주장 표현은 당신이 프로그램에서 원하지 않는 것이 될 것입니다.

예.

  1. assert <condition> without -- assert를 합니다.<error message>

    var = int(input("Enter value 1-9 inclusive:"))                                 
    assert var!=0 
    print(var)
    

    출력:

    입력이 0인 경우:

    AssertionError
    

    입력이 1인 경우:

    1
    
  2. assert <condition>,<error message> assert와 합니다.<error message>

    var = int(input("Enter value 1-9 inclusive:"))                                 
    assert var!=0,"Input cannot be zero"
    print(var)
    

    출력:

    입력이 0인 경우:

    AssertionError: Input cannot be zero
    

    입력이 1인 경우:

    1
    

요점:

  1. 디버깅 도구로 사용됩니다.
  2. 표현식 및 옵션메시지가 필요합니다.
  3. 거의 모든 프로그래밍 언어로 존재합니다.

assert를 지정하면 Python이 됩니다.AssertionError 일 경우assert는 "" 입니다.False그렇지 않으면 아무 일도 없었던 것처럼 계속됩니다.

1:

a = 5
b = 6

assert a == b

출력:

AssertionError

'우리'나 '우리'나 '우리'나 '우리'나 '우리'나 '우리'나 '우리'나 '우리'는a 않다b, , 기껏해야, , 합니다Exception당신의 코드로.

def get_dict_key(d, k):
    try:
        assert k in d
        return d[k]
    except Exception:
        print("Key must be in dict.")

위의 예는 실질적으로 도움이 되지 않지만 대부분 디버깅 목적으로 사용되므로 버그를 추적할 수 있습니다.

format : assert Expression [,arguments] 아사트에서 문이 발견되면 Python은 식을 평가합니다.스테이트먼트가 true가 아닌 경우 예외가 발생합니다(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!    
def getUser(self, id, Email):

    user_key = id and id or Email

    assert user_key

함수 호출에서 매개 변수가 전달되도록 하기 위해 사용할 수 있습니다.

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

언급URL : https://stackoverflow.com/questions/5142418/what-is-the-use-of-assert-in-python