스 니펫은 예외를 발생시키지 않습니다. 어쩌면 당신은
try:
if g > h:
print 'Hey'
else:
raise NotImplementedError('This condition is not handled here!')
except Exception as e:
# ...
또 다른 가능성처럼 뭔가를 당신이 말하는 의미 즉 원하는 :
try:
assert g > h
print 'Hey!'
except AssertionError as e:
# ...
assert
키워드는 기본적으로 같은 동작 "-실패 안전합니다." 조건이 거짓이면 AssertionError
예외가 발생합니다. 함수 인수에 대한 전제 조건을 확인하는 데 자주 사용됩니다. (예를 들어 값이 이해하기 위해 기능을 위해 0보다 커야합니다.)
편집 :
예외가 어떤 프로그램을 중단 코드에서 "신호"의 일종이다 가장 가까운 "예외 처리기"로 연결됩니다. 프로그램에서 예외가 발생할 때마다 모든 실행이 즉시 중단되고 코드의 가장 가까운 except:
섹션으로 이동하려고 시도합니다. 존재하지 않으면 프로그램이 충돌합니다. 다음 프로그램을 실행 해보십시오 :
print 'Hello. I will try doing a sum now.'
sum = 3 + 5
print 'This is the sum: ' + str(sum)
print 'Now I will do a division!'
quotient = 5/0
print 'This is the result of that: ' + str(quotient)
실행하면 프로그램이 충돌하는 것을 볼 수 있습니다. 내 파이썬에서 알려줍니다.
ZeroDivisionError: integer division or modulo by zero
이것은 예외입니다! 예외적 인 무엇인가 일어났다! 물론 0으로 나눌 수는 없습니다. 여러분이 알다시피,이 예외는 가장 가까운 exception:
블록이나 예외 처리기으로가는 신호를 찾는 일종의 신호입니다. 이 프로그램을 다시 작성하여보다 안전합니다.
try:
print 'Hello. I will try doing a sum now.'
sum = 3 + 5
print 'This is the sum: ' + str(sum)
print 'Now I will do a division!'
quotient = 5/0
print 'This is the result of that: ' + str(quotient)
except Exception as e:
print 'Something exceptional occurred!'
print e
이제 우리 캐치를 제외하고, 뭔가 특별한 일이 있다는 신호. 신호를 변수 e
에 넣고 출력합니다. 이제 프로그램이 ZeroDivisionError
예외가 발생하면
Something exceptional occurred!
integer division or modulo by zero
가 발생합니다, 그 지점에서 실행을 중지하고, 예외 핸들러로 바로 갔다. 원하는 경우 수동으로 예외를 발생시킬 수도 있습니다.
try:
print 'This you will see'
raise Exception('i broke your code')
print 'This you will not'
except Exception as e:
print 'But this you will. And this is the exception that occurred:'
print e
raise
키워드는 예외 신호를 수동으로 보냅니다.ZeroDivisionError
예외, AssertionError
예외, NotImplementedError
예외 및 기타와 같은 여러 종류의 예외가 있지만 추가 연구용으로 남겨 둡니다.
원래 코드에서 예외적 인 상황이 발생하지 않았으므로 예외가 발생하는 것을 결코 보지 못했습니다. 조건 (예 : g > h
)을 기반으로 예외를 트리거하려는 경우 raise
처럼 약간 동작하는 assert
키워드를 사용할 수 있지만 조건이 거짓 일 때만 예외가 발생합니다. 따라서 작성하는 경우
try:
print 'Is all going well?'
assert 3 > 5
print 'Apparently so!'
except AssertionError as e:
print 'Nope, it does not!'
"분명히!" 메시지는 어설 션이 거짓이고 예외를 트리거하기 때문에 발생합니다. 어설 션은 프로그램에서 값을 이해하고 현재 작업을 중단하려는 경우 유용하게 사용할 수 있습니다.
(예외 처리 코드에서 AssertionError
을 명시 적으로 포착했음을 유의하십시오.이 예외는 다른 예외를 catch하지 않으며, 단지 AssertionError
초입니다. 예외 사항에 대해 계속 읽는다면이 문제는 즉시 해결 될 것입니다. 걱정하지 마십시오. 지금은 그들에 대해 많이 알고 있습니다.)
예외가 발생하지 않았습니다. 예외 처리 코드는 코드가 예외를 던지거나 호출하는 메서드에 의해 예외가 발생하여 코드 메인 라인에서 예외가 발생할 때만 실행된다는 것을 알고 있습니까? –