01. 예외처리(Exception)
1) 이클립스상에서 개발시에 Python script(클래스)가 안정적으로 컴파일된 후 운영중에 발생하는 에러를 "예외"라고 한다.
예외는 코드상에서 발생하는 에러하고는 다르며 컴파일시에는 예외가 발생하지 않음.
마치 손상된 USB를 읽어오는 프로그램이 있다면 USB는 인식이되나 읽어 올 수 없음으로
경고창이 발생하는 경우.
예) 네트웍 장애, IO, DBMS 서버 다운, 저장 장치의 용량이 없는 경우.
2) 예외가 발생하면 프로그램이 메시지 출력후 종료되어 심각한 문제가 발생할 수 있으나 예외 처리를 하면, 예외가 발생되서 프로그램이 끝나는 것이
아니라 나머지 루틴이 정상적으로 실행됨으로 안정적인 프로그램이됨.
3)
try:
예외 발생 예상 코드
except Exception as e:
예외 발생 원인 출력
else:
예외가 발생하지 않은 경우
finally:
예외 발생과 상관없이 실행되는 루틴
4) Exception API: https://docs.python.org/3/library/exceptions.html
1. try ~ except ~ else 실습
- tot = input('총점을 입력하세요.');
[실행 화면]
① 정수형으로 변환하지 않은 경우
총점을 입력하세요: 240
총점을 입력하세요: 230
▷ 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('총점을 입력하세요.');
[실행 화면]
① 정상 처리
총점을 입력하세요: 170
총점을 입력하세요: 160
▷ 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):
.....
'빅데이터 프로그래밍 > Python' 카테고리의 다른 글
[Python] 14. [IO] 데이터 파일을 읽어 성적, 연봉, 단풍 여행 처리 시스템을 작성하세요. (0) | 2017.08.02 |
---|---|
[Python] 13. [IO] IO(입출력), File 클래스 다루기, 파일 이동, 디렉토리 조작, 파일 목록, 파일 복사 (0) | 2017.08.02 |
[Python] 11. 상속(ingeritance), 부모클래스의 생성자호출, 생성자/메소드 오버로딩, 다중 상속 (0) | 2017.08.02 |
[Python] 10. Class 선언, 클래스 멤버, 메소드, 인스턴스 멤버, 메소드의 실습, 생성자, 소멸자, 모듈 분리 (0) | 2017.08.02 |
[Python] 09. 모듈과 패키지의 사용, import의 사용, Template (0) | 2017.08.02 |
댓글