Python 예외처리

Jayce_97·2023년 5월 9일
0

Python 기초

목록 보기
8/10
post-thumbnail

오늘은 Python으로 예외처리하는 법에대해 공부해보려고 합니다.


예외처리

예외처리는 파이썬은 순차적으로 작동하다 코드에서 오류 발견시 정지 후 오류 메시지가 나오게 되는데 오류가 발생할만한 지점에 예외처리를 통해 프로그램을 마지막까지 구동시키기 위해 사용됩니다.
예외처리에는 대표적으로 3가지 방법이 있습니다.

try, except

try:
	~
except [발생오류 [as 오류변수]]:
	~

와 같이 이용됩니다. try 블록 실행 중 오류가 발생하면 except 블록으로 넘어가게 됩니다.
반대로 try 블록 실행 중 오류가 없다면 except은 실행되지 않습니다.
발생오류만 작성시(ex except 발생오류:) 미리 정해 놓은 오류와 동일한 오류 일경우에만 수행하고 오류변수까지 포함시(ex except 발생오류 as 오류변수) 해당 오류시 메시지 출력이 가능합니다. except을 이용한다면 여러가지 오류처리가 가능합니다.

try, finally

try:
    f = open('filename.txt', 'w')
	...
    
finally:
    f.close()

와 같이 작성되는데 finally절은 수행 도중 예외 발생 여부 상관없이 항상 수행됩니다.
except과 다르게 finally의 의미 처럼 마지막에 무조건 적으로 작동되기 때문에 파일을 닫을 때와 같은 상황에 사용됩니다.

try, else

try:
	print(4/2)
except:
	print('error')
else:
	print('no error')

와 같이 작성되며 오류가 발생하면 except절이 실행되어 'error'가 나오고 오류가 없을 시
else절이 실행되어 2와 'no error'가 나오게 됩니다.

오류 회피

try:
    f = open("No file", 'r')
except FileNotFoundError:
    pass

다음과 같이 파일이 없는경우 Pass를 시킬 수 있습니다.


오류예시

input

try:
    4/0 #검사할 코드
except: #예외가 발생할 경우
    print('0으로 나눌 수 없습니다.')    

output

0으로 나눌 수 없습니다.

모든 숫자는 0으로 나누는 것이 불가능 하기 때문에 ZeroDivisionError: division by zero가 출력되게 됩니다. 하지만 예외처리를 통해 '0으로 나눌 수 없습니다.'가 출력됨을 확인 할 수 있습니다. ZeroDivisionError: division by zero 오류를 통해 다음 코드를 이해 할 수 있습니다.


except 발생오류 as 오류변수

input

try:
    4/0
except ZeroDivisionError as e: # 세부적인 처리 
    print(e) #에러메시지 출력

output

division by zero

except [발생오류 [as 오류변수]]를 이용하여 ZeroDivisionError(발생오류)오류가 날경우
division by zero(오류변수)를 출력함을 알 수 있습니다.


예외처리 응용

input

print('종료하려면 q를 입력하세요')
while True: #무한반복
    num1=input('\n분자:')
    if num1=='q':
        break
    num2=input('분모:')
    try:    #검사할 코드
        result=int(num1)/int(num2)
    except: #예외 발생
        print('분모에 0이 올 수 없습니다.')
    else:   #정상 실행
        print(result)

print('종료')     

output

종료하려면 q를 입력하세요
0.25
분모에 0이 올 수 없습니다.
종료

분자에 1을 분모에 4를 넣게되면 정상적으로 0.25가 나오게되고 분자에1 분모에 0을 넣을경우 오류메시지를 반출 할 수 있습니다.


파일오류

input

f=open('d:/data/temp/test2.txt')

output

FileNotFoundError: [Errno 2] No such file or directory: 'd:/data/temp/test2.txt'

해당 파일이 없기 때문에 FileNotFoundError와 함께 [Errno 2] No such file or directory: 'd:/python/data/temp/test2.txt'라는 오류 메시지가 출력됩니다.


파일오류 예외처리

input

try:
    f=open('d:/data/temp/test2.txt')   #파일 오픈
except FileNotFoundError as e: # 파일이 존재하지 않을 경우
    print(e)    
else: #파일이 존재하면
    while True:
        line=f.readline() #한 라인을 읽음
        if not line: break  # 내용이 없으면 반복문 종료
        print(line,end='')     # 출력 후 줄바꿈 하지 않음
    f.close()     #파일 닫기 

output

파일이 있을때:
power through to the end
파일이 없을때:
[Errno 2] No such file or directory: 'c:/python/temp/test2.txt'

다음과 같이 없을 때 FileNotFoundError오류가 아닌 오류메시지만 출력되고 파일은 닫히게 됩니다.

파일을 직접 만드셔서 확인 하셔야합니다. 만드실 때 인코딩을 잘 확인 해주시고, 인코딩 오류가 나시면 다른 이름으로 저장을 누르신 후 UTF-8로 바꾸셔서 저장해주시면 됩니다.


파일예외처리 및 응용

input

def count_words(filename):
    try:
        with open('d:/data/text/'+filename)  as f: 
            contents=f.read() 
    except:
        print('파일이 존재하지 않습니다.')
        #pass #블록에 아무 내용이 없을 때 
    else:
        words=contents.split()    #공백 단위로 나눔
        num_words=len(words) #단어수 
        print(f'파일이름:{filename}, 단어수: {num_words}')

filenames=['alice.txt','moby_dick.txt','little_women.txt']
for filename in filenames:
    count_words(filename)

output

파일이름:alice.txt, 단어수: 29461
파일이름:moby_dick.txt, 단어수: 215136
파일이름:little_women.txt, 단어수: 189079

다음은 파이썬을 이용하여 파일에서 단어수를 알아내는 코드입니다. 예외처리와 함께 전시간 내용을 복습겸 공부해 보았습니다.


이상으로 오늘은 예외처리에 대해 배워 보았는데요 예외처리는 여러가지 기능을 원하는데로 사용할 수 있도록 도와주는 만큼 유용하기도 하고 잘못 사용 할 경우 코드가 복잡해 질 수 있기 때문에 많은 공부가 필요합니다. 다음시간에는 정규표현식에 대해 배워 보도록하겠습니다.

😁 power through to the end 😁

profile
Dreamer

0개의 댓글