1 life 2 live
파이썬 기초 프로그래밍(9-2) - 파일 예외 처리 [20.7.29] 본문
9. 파일 예외 처리의 필요성
■ 파일 열기
º 없는 파일에 대한 열기를 시도하면?
º 'nofile.no'라는 파일이 존재하지 않음
º 수행 결과
■ 0으로 나누기
º print(3/0)를 시도한다면?
■ 범위를 벗어난 인덱싱 시도
■ 오류
º 문법적 오류
• 문법적 오류가 존재 할 경우, 프로그램의 실행이 되지 않는다!
• 컴파일러/인터프리터에 의하여 확인 가능
• 문법적 오류의 예)
˚ 괄호 실수
˚ 콜론 실수
˚ 들여쓰기 실수
• 예)
º 논리적 오류
• 문법적인 오류는 없음. 따라서 프로그램이 실행은 된다!
• 런타임(실행 시간)에 확인 가능한 논리적인 오류
˚ 런타임 오류가 발생하면 프로그램이 비정상 종료 됨
•예)
■ 오류는 어떻게 해결하는가?
º 문법적 오류
• 컴파일러/인터프리터에 의하여 선확인 된 오류를 직접 수정
º 논리적 오류
• 논리적 오류가 발생 할 수 없도록 수정
• 논리적 오류가 발생 할 수 있는 경우, 해당 오류를 처리할 수 있도록 대비
˚ 프로그램이 비정상 종료되지 않도록 대비
10. 파일 예외 처리의 흐름
■ 정상적인 프로그램
■ 컴파일 오류가 포함되어 있는 프로그램
■ 런타임 오류가 포함되어 있는 프로그램
■ 런타임 에러 처리의 목표
11. 파일 예외 처리: try. except
■ 예)
º 프로그램이 비정상 종료되지 않고 “error?”를 출력하고 정상 종료됨
■ 특정 오류를 처리하기 위한 try/except 구문
■ IndexError를 처리하기 위한 예)
º 3번 라인을 print(my_list[2]/0)으로 바꾸면 어떻게 될까?
■ 여러개의 오류들을 처리하기 위한 try/except 구문
º ZeroDivisionError와 IndexError를 처리하기 위한 예)
■ 에러가 나도 무시하고 싶다면?
º pass 구문 활용: 실행 할 코드가 없음을 명시적으로 표기
■ 실습) 사용자로부터 곱셈 문제의 답을 입력받아 정답여부를 체크하는 프로그램을 작성하시오.
º 단, 곱하고자 하는 두 숫자는 1~9를 랜덤으로 생성할 것
º 정수가 아닐 경우 발생하는 에러를 처리하도록 작성 할 것
º import random, num1= random.randint(1,9), num2= random.randint(1,9) 활용
↓정답
import random
num1 = random.randint(1,9)
num2 = random.randint(1,9)
try:
answer = int(input('%d 곱하기 %d는 무엇일까요? ' % (num1 ,num2)))
except ValueError:
print('정수를 입력하세요.')
if answer == num1*num2:
print('정답입니다.')
else:
print('오답입니다.')
■ 오류 메시지 처리하기
■ 오류가 없는 경우의 처리
º else 구문 활용. 반드시 except 절 이후에 선언해야 함.
■ 예외 발생 여부에 상관없이 처리해야 하는 코드가 있다면?
º finally 구문 활용
º except, else 절이 없어도 사용 가능
■ 예제)
■ 사용자로부터 파일명을 입력받아 해당 파일의 내용을 출력하기 위한 함수 print_file()을 작성하시오.
º 단, 파일 이름이 잘못 들어올 경우, 오류를 처리하여 파일명을 다시 입력받을 수 있어야 함
º 기본 코드 뼈대는 다음장의 코드를 이용할 것
↓정답
def print_file(name):
try:
with open(name,'r') as file:
print(file.read())
return True
except:
return False
is_read = False
while not is_read:
filename = input('파일명을 입력하세요: ')
is_read = print_file(filename)
12. 정리
■ 파일 처리
º 영구적으로 데이터를 저장하기 위한 방법
º 파일 열기, 파일 처리, 파일 닫기의 흐름
º 파일 열기 모드에 따라 읽기/쓰기/추가 등의 동작이 가능
■ 예외 처리
º try/except 구문: 런타임 오류를 처리하기 위한 기본 구문
º 자세한 에러 메시지 정보를 제공 할 수 있음
º try/except 구문과 else, finally를 활용하여 다양한 상황 대응 가능
'파이썬' 카테고리의 다른 글
파이썬 기초 프로그래밍(11) - GUI 개발환경 구축 (PyQt5 설치) [20.7.30] (0) | 2020.07.31 |
---|---|
파이썬 기초 프로그래밍(10) - 모듈 프로그래밍 [20.7.30] (0) | 2020.07.30 |
파이썬 기초 프로그래밍(9-1) - 파일처리 [20.7.28] (0) | 2020.07.28 |
파이썬 기초 프로그래밍(8-2) - 함수(지역변수, 전역변수) [20.7.27] (0) | 2020.07.27 |
파이썬 기초 프로그래밍(8-1) - 함수(선언, 인자) [20.7.26] (0) | 2020.07.26 |