예외처리
자바개발자들이 예외처리 하는데 늘 사용하는 try-catch-finally 구문과 비슷하다.
- 자바에서는 throw(던지다)
- 파이썬에서는 raise(일으킨다)
자바에서의 예외처리
try {
// 예외를 던질 수있는 몇 가지 작업을 수행
} catch (ExceptionType messageVariable) {
// 몇 가지 예외 처리를 수행
} finally {
// 항상 호출해야하는 코드를 실행
}
예외잡기
프로그램에서 문제(오류, 예외)를 일으키는 부분을 프로그램이 정지하지 않고,
사용자에게 무엇이 문제인지, 오류 메세지를 전달하는 목적
try-except 예제
# 다음 함수는 try-except 문을 통하여 사용자가 0을 분모로 전달하면
# 친절한 에러 메세지를 제공한다.
>>> from __future__ import division
>>> def divide_numbers(x, y):
... try:
... return x/y
... except ZeroDivisionError:
... return 'You cannot divide by zero, try again'
…
# 8 나누기 3을 시도
>>> divide_numbers(8,3)
2.6666666666666665
# 8 나누기 0을 시도
>>> divide_numbers(8, 0)
'You cannot divide by zero, try again'
try-except-finally 논리
try:
# 예외를 유발할 수 있는 작업을 수행
except Exception, value:
# 예외 처리를 수행
finally:
# 항상 완료되어야하는 작업을 수행(예외를 발생시키기 전에 처리됨)
try-finally 논리
try:
# 예외를 유발할 수 있는 작업을 수행
finally:
# 항상 완료되어야하는 작업을 수행(예외를 발생시키기 전에 처리됨)
try-except-else 논리
try:
# 예외를 발생시킬 수 있는 작업을 수행
except:
# 예외 처리를 수행
else:
# 아무 예외도 던져지지 않았을 때에만 할 일을 수행
Java와 파이썬 비교
JAVA | PYTHON | 설명 |
---|---|---|
try | try | 예외가 예상되는 코드 |
catch | except | 발생한 예외에 대한 처리를 수행 |
finally | finally | 무조건 수행 |
else | 아무 예외도 찾을 수 없는 경우 |
파이썬 2.5 이전
try:
# 코드
except ExceptionType, messageVar:
# 코드
파이썬 2.6 이후
try:
# 코드
except ExceptionType as messageVar:
# 코드
예외정보 보기(sys.exc_info() )
sys 모듈의 sys.exc_info()도예외 유형과 메시지를 모두 제공
sys.exec.info()는 어떤 예외 유형이 던져질지 확실치 않은 상황에서 try-except 블록으로 어떤 코드를 감싼다면 매우 유용
# 명시적으로 예외 유형을 명명하지 않고 예외 처리를 수행
>>> x = 10
>>> try:
... z = x / y
... except:
... print "Unexpected error: ", sys.exc_info()[0], sys.exc_info()[1]
...
Unexpected error:
<type 'exceptions.NameError'> name 'y' is not defined