1 life 2 live

파이썬 기초 프로그래밍(9-2) - 파일 예외 처리 [20.7.29] 본문

파이썬

파이썬 기초 프로그래밍(9-2) - 파일 예외 처리 [20.7.29]

대희투 2020. 7. 29. 18:20

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를 활용하여 다양한 상황 대응 가능

728x90
반응형
Comments