1. 입력, 파일처리, db 등 외부와 연결해야 할 때 사용
2. 형식: try:
수행할 문장…
except~
finally:
수행할 문장…
3. try안에서 에러가 발생하면 except로 넘어갔다가 finally가고 try안에서 에러가 발생 안 하면 바로 finally간다.
4. except
(1) except: 오류 종류에 상관없이 발생하면 except블록을 수행
(2) except Exception as 오류 메시지 변수: 오류 종류에 상관없이 발생하면 오류 메시지를 출력하면서 except블록을 수행
1) Exception: 에러의 최상위 클래스
2) sub클래스들을 처리하고 나머지를 Exception로 처리하고 싶을 땐 무조건 sub예외처리들의 젤 마지막에 선언해야 한다.
(3) except 발생오류(Exception의 sub클래스): 미리 정해 놓은 발생오류 명과 같을 때만 수행
(4) except 발생오류(Exception의 sub클래스) as 오류 메시지 변수: 발생오류 명과 같을 때 오류 메세지를 출력하면서 수행
(5) 여러 개의 오류처리 가능
(6) except블록에 pass키워드를 쓰면 오류 회피
(7) raise 오류명
1) 일부러 오류 발생시키기
2) 보통 상속받는 클래스에서 부모의 메소드를 오버라이딩 하지않았을 때 예외 발생하도록 할 때 사용
ex) class Bird:
def fly(self):
raise NotImplementedError
class Eagle(Bird):
pass
eagle = Eagle()
eagle = fly() => raise NotImplementedError
(8) Exception을 상속받는 클래스를 만들면 직접 예외를 만들 수도 있다.
5. finally:
(1) 예외발생 여부에 상관없이 항상 수행할 문장을 블록에 입력
(2) 보통은 리소스를 close해야할 때 많이 사용.
예외처리 예제)
#예외처리: try~except - 예상치 않은 에러에 대응하기 위한 문법
def divide(a, b):
return a / b
c = divide(5, 2)
# c = divide(5, 0) # ZeroDivisionError: division by zero
print(c)
print('--------------------------')
#try안에서 에러가 발생하면 except로 넘어갔다가 finally가고
#try안에서 에러가 발생안하면 바로 finally간다
try:
c = divide(5, 2)
print(c)
aa = [1, 2]
print(aa[0])
#print(aa[2]) #IndexError: list index out of range
#file을 읽을 때는 open()
f = open('c:/abc.txt')
except ZeroDivisionError: # 특정 예외에 대한 에러문장 지정 가능, 에러마다 따로 처리 가능
print('0으로 나누면 안됩니다.')
except IndexError as e: # 특정 예외에 대한 에러문장 지정 가능, 에러마다 따로 처리 가능
print('인덱스 에러: ', e)
except Exception as err:
# 모든 에러 ∵ 에러의 최상위 클래스 Exception, 따라서 sub클래스들을 처리하고
#나머지를 Exception로 처리하고싶을 땐 무조건 sub예외처리들의 젤 마지막에 선언해야한다.
print('에러발생: ', err)
finally:
print('에러 유무에 관계없이 반드시 수행되는 영역')
print('프로그램 끝')
13. 원격(remote) db연동 – MariaDB (0) | 2021.04.29 |
---|---|
12. GUI(윈도우 프로그래밍) (0) | 2021.04.29 |
10. 내장함수 (0) | 2021.04.29 |
8. 사용자 입력과 출력 (0) | 2021.04.29 |
9. 파일 읽고 쓰기 File I/O (0) | 2021.04.25 |