예외처리

자바개발자들이 예외처리 하는데 늘 사용하는 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

results matching ""

    No results matching ""