빅데이터 프로그래밍/Python

[Python] 12. 예외처리(Excetption), try, except ~ else ~ finally 실습

밍글링글링 2017. 8. 2.
728x90

01. 예외처리(Exception)
1) 이클립스상에서 개발시에 Python script(클래스)가 안정적으로 컴파일된 후 운영중에 발생하는 에러를 "예외"라고 한다. 
예외는 코드상에서 발생하는 에러하고는 다르며 컴파일시에는 예외가 발생하지 않음. 
마치 손상된 USB를 읽어오는 프로그램이 있다면 USB는 인식이되나 읽어 올 수 없음으로 

경고창이 발생하는 경우.
예) 네트웍 장애, IO, DBMS 서버 다운, 저장 장치의 용량이 없는 경우. 

2) 예외가 발생하면 프로그램이 메시지 출력후 종료되어 심각한 문제가 발생할 수 있으나 예외 처리를 하면, 예외가 발생되서 프로그램이 끝나는 것이
아니라 나머지 루틴이 정상적으로 실행됨으로 안정적인 프로그램이됨. 

3)

try:
          예외 발생 예상 코드
       except Exception as e: 
           예외 발생 원인 출력
       else:
           예외가 발생하지 않은 경우
       finally:
           예외 발생과 상관없이 실행되는 루틴

4) Exception APIhttps://docs.python.org/3/library/exceptions.html  

 

1. try ~ except ~ else 실습

- tot = input('총점을 입력하세요.');

[실행 화면]
① 정수형으로 변환하지 않은 경우

총점을 입력하세요: 250  
과목수를 입력하세요: 3
예외가 발생했습니다.
unsupported operand type(s) for /: 'str' and 'str'
    
② 정상적인 경우
총점을 입력하세요: 240
과목수를 입력하세요: 3
tot: 240
cnt: 3
avg: 80.0
 
③ else를 사용한경우
총점을 입력하세요: 230
과목수를 입력하세요: 3
tot: 230
cnt: 3
avg: 76.66666666666667
평균은 76.66666666666667 입니다.
---------------------------------------------------
▷ oop1.Except1.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-

try:
    tot = int(input('총점을 입력하세요: '))
    cnt = int(input('과목수를 입력하세요: '))
    avg = tot / cnt

    print('tot: ' + str(tot))
    print('cnt: ' + str(cnt))
    print('avg: ' + str(avg))

except Exception as e:
    print("예외가 발생했습니다.")
    print(e)

else:
    print('평균은 ' + str(avg) + ' 입니다.')


-------------------------------------------------------------------------------------
 

 

2. try ~ except ~ else ~ finally 실습

- tot = input('총점을 입력하세요.');

[실행 화면]
① 정상 처리

총점을 입력하세요: 180
과목수를 입력하세요: 2
tot: 180
cnt: 2
avg: 90.0
평균은 90.0 입니다.
성적 처리 프로그램을 종료합니다.
 
② 0을 입력한경우
총점을 입력하세요: 170
과목수를 입력하세요: 0
0으로 나누려 했습니다.
성적 처리 프로그램을 종료합니다.
  
③ 숫자를 입력하지 않은경우
총점을 입력하세요: 160
과목수를 입력하세요: two
숫자가 아닙니다.
성적 처리 프로그램을 종료합니다.
▷ oop1.Except2.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-

try:
    tot = int(input('총점을 입력하세요: '))
    cnt = int(input('과목수를 입력하세요: '))
    avg = tot / cnt

    print('tot: ' + str(tot))
    print('cnt: ' + str(cnt))
    print('avg: ' + str(avg))

except ZeroDivisionError:
    print("0으로 나누려 했습니다.")
    
except ValueError:
    print('숫자가 아닙니다.')
    
else:
    print('평균은 ' + str(avg) + ' 입니다.')

finally:
    print("성적처리 프로그램을 종료합니다.")    

   

-------------------------------------------------------------------------------------

 

3. Exception class를 상속받아 새로운 Exception을 만들 수 있습니다.
예) 신용등급에 따라 대출이자의 범위를 벗어나면 예외 발생
class CreditEsception(Exception):
.....

 
 

 

728x90

댓글