-
[python] 실행 오류 및 파일을 다루는 예외 처리와 파일 입출력Languages/python 2021. 5. 26. 14:02반응형
예외 처리 개요
실행 시 오류 발생
원인은 정수나 실수를 입력해야 하는 상황에서 사용자의 입력이 잘못
네트워크의 송수신 문제 또는 요구한 파일이 없는 문제 들
그럼에도 불구하고 프로그램 실행 중에 오류가 발생하는 것은 대부분 개발자의 책임
발생할 수 있는 경우를 예측해 실행 오류가 발생 하지 않도록
오류가 발생하더라도 프로그램이 바로 종료되는 일은 막도록 해야 한다
예외와 예외처리 (exception handle)
실행 중에 발생하는 오류를 예외
발생한 예외를 처리해 프로그램이 바로 종료되는 일을 없도록 하는 것
프로그램 실행 -> 실행 오류 발생 -> 예외처리 no (바로 프로그램 중단 오류 메시지 출력)
예외처리 yes (발생 예외 처리 이후 문장 계속 실행)
구문 오류 : 문법 오류
syntaxError : invaliad syntax
실행 오류
zerodivisionError : division by zero
예외 처리 구문 try except
예외 발생이 의심스러운 문장들을 try 블록에 배치
try 블록에 예외가 있을 경우 실행될 코드를 except 블록에 배치
예외가 발생하면 이후 블록의 문장은 실행되지 않고
바로 except 블록으로 이동해 블록 내부의 문장들을 실행
try :
예외가 발생할 수 있는 문장1
예외가 발생할 수 있는 문장2
예외가 발생할 수 있는 문장3
except :
예외 발생 시 해야할 문장들
가장 간단한 구문
try:
10/0
except:
pass
try : 다음 불록에 예외가 예상되는 문장들을 고딩
except : 이후 블록에 문장 pass를 넣어줌
pass나 다른 문장이 전혀 없으면
indentationError오류가 발생
예외가 발생한 정보를 저장해 처리하는 except as
except 이후에 '발생된_예외 객체_ 클래스 이름 as 변수명'을 추가
예외가 발생 이후
예외 인스턴스라는 것이 발생
이 객체에 예외 발생 클래스와 이유 정보가 저장
이 객체를 변수 e로 받으면 예외 상황에 대한 정보를 활용
변수명은 관례적으로 e와 exception 또는 error 등으로 받아 처리
try: data = int('3.67') except Exception as e: print('예외 발생 이름: {}'.format(type(e))) print('예외 발생 이유: {}'.format(e)) -------------------------------------------- 예외 발생 이름 : <class 'ValueError'> 예외 발생 이유 : invalid literal for int() with base 10 : '3.67'
예외와 관련된 클래스
모든 예외를 계층적 클래스로 정의해 관리
예외의 가장 상위 클래스는 BaseException
우리가 접하는 많은 예외 클래스는 Exception 클래스
indexError 예외가 발생
리스트나 튜플 참조에서 첨자 범위를 벗어나면
except 이후의 예외 이름
상위 클래스인 lookuperror나 exeption.baseexception을 사용해도 예외처리가 가능
가능하면 보다 구체적인 예외를 적시해 예외를 처리하는 것은 권장
예외 처리 구문 try except else finally(1)
try 에서는 except의 옵션
else : 블록 : 예외가 발생하지 않으면 실행
finally : 블록 : 예외 발생과 상관없이 try 블록을 실행하면 반드시 실행
try :
except :
else :
finally :
예외 처리 구문 try except else finally(2)
문자열 첨자가 범위를 벗어나 indexError가 발생
except 와 finally 블록이 실행
문자열 첨자가 0으로 문자 p를 참고하고 있어 예외가 발생하지 않음
lst = ['c/c++','java','c#','python'] try: print(lst[4]) except Exception as e : print('예외발생 이름 : {}'.format(type(e))) print('예외발생 이유 : {}'.format(e)) else : print('잘 실행됐습니다.') finally : print('예외 처리가 잘 되어있습니다!')
한번에 여러 예외 처리 구현
try 블록에서 except를 여러 개 가능
예러 개의 except가 있더라도 예외가 발생하면 하나만 실행
물론 except가 있더라고 발생한 예외가 적시한 예외 클래스가 동일하거나
하부 클래스가 아니라면 except 블록은 실행되지 않음
반응형'Languages > python' 카테고리의 다른 글