[ python 친해지기 #17 ] 파이썬 예외 처리
안녕하세요. 심심한 코딩쟁이입니다.
오늘은 파이썬의 예외 처리에 대해서 알아보도록 하겠습니다.
코드를 작성하고 테스트를 위해서 실행해보면 모두 한번쯤은 오류가 발생하는 상황을 맞이하게 될 것입니다.
이때 오류를 유연하게 처리하도록 도와주는 것이 예외 처리 방법이다.
함께 살펴보시죠.
왜 오류가 발생할까?
코딩을 하다보면 분명 제대로 코드를 작성한 것 같은 느낌이 가득하지만 코드를 실행하면 오류가 발생합니다.
빈번하게 일어나는 오류들을 살펴보면서 왜 오류가 발생하는지 알아봅시다.
# 오류 발생 케이스
# 0으로 나눌 때 ZeroDivisionError
a = 3
b = 0
c = a/b
# 오류 발생 ##################################
Traceback (most recent call last):
File "d:\test.py", line 6, in <module>
c = a/b
ZeroDivisionError: division by zero
##############################################
# 인덱스에 잘못 접근했을 때 IndexError
test_list = [1, 2, 3, 4]
print(test_list[5])
# 오류 발생 ##################################
Traceback (most recent call last):
File "d:\test.py", line 11, in <module>
print(test_list[5])
IndexError: list index out of range
##############################################
# 없는 파일을 오픈하려할 때 FileNotFoundError
f = open('xxx.txt', 'r') # xxx.txt는 존재하지 않는 파일
# 오류 발생 ######################################################
Traceback (most recent call last):
File "d:\test.py", line 15, in <module>
f = open('xxx.txt', 'r')
FileNotFoundError: [Errno 2] No such file or directory: 'xxx.txt'
##################################################################
파이썬이 해당 코드가 제대로 작동하지 않을 것을 알아채고 오류메시지를 보여주면서 실행을 중단을 시켜줍니다.
이때 우리는 예외 처리를 통해 코드가 중단되지않도록 해줄 수 있습니다.
파이썬 예외 처리 방법
파이썬에서 오류를 다루는 방법으로 예외 처리를 사용하는데 다양한 구조로 변형이 가능합니다.
예제를 보면서 살펴보시죠.
try except
오류를 예외 처리하는 예제입니다.
# 오류 예외 처리 try except
# except 뒤에 아무것도 없는 경우
# 모든 오류를 처리합니다.
try:
f = open('xxx.txt', 'r')
except:
print("에러 발생")
# except 뒤에 특정 오류 지정
# 지정된 오류만 처리합니다.
try:
f = open('xxx.txt', 'r')
except FileNotFoundError:
print("FileNotFound 에러 발생")
# except 뒤에 특정 오류 지정후 대입할 변수 설정
# 지정된 오류만 처리하고 오류가 변수에 대입됨
# 보통 어떤 오류가 발생했는지 알고싶을 때 이 방법을 사용
try:
f = open('xxx.txt', 'r')
except FileNotFoundError as e:
print(e)
try except finally
오류 예외 처리 예제입니다.
finally 절에는 무조건 실행되어야하는 코드를 위치시킵니다.
# 오류 예외 처리 try except finally
# finally 에 존재하는 코드는 오류가 발생하든 안하든 무조건 실행됩니다.
# 꼭 실행해야하는 코드를 위치시켜두면 잘 작성한 코드라고 볼 수 있습니다.
# xxx.txt 파일이 존재하고 ZeroDivision 오류를 발생시키면서 finally 문의 동작을 확인합니다.
try:
f = open('xxx.txt', 'r')
tmp = 4/0
except:
print("에러 발생")
finally:
f.close()
print("파일 객체 닫음")
try:
f = open('xxx.txt', 'r')
tmp = 4/0
except FileNotFoundError: # 여러 에러를 각각 예외 처리
print("FileNotFound 에러 발생")
except ZeroDivisionError: # 여러 에러를 각각 예외 처리
print("ZeroDivision 에러 발생")
finally:
f.close()
print("파일 객체 닫음")
try:
f = open('xxx.txt', 'r')
tmp = 4/0
except (FileNotFoundError, ZeroDivisionError) as e: # 여러 에러를 묶어서 예외 처리
print(e)
finally:
f.close()
print("파일 객체 닫음")
try except else
오류 예외 처리 예제입니다.
try 문에서 오류가 발생하지 않을 때만 else 절이 실행됩니다.
# 오류 예외 처리 try except else
# try에서 오류가 발생하지 않았을 때만 else가 실행됩니다.
try:
passwd = int(input('비밀번호를 입력하세요(4자리): '))
except:
print('숫자만 입력해주세요.')
else:
if passwd // 10000:
print('4자리 숫자를 입력해주세요.')
elif passwd != 4885:
print('비밀번호가 틀렸습니다.')
else:
print('로그인 성공.')
특정 오류 넘어가기
# 특정 오류에 대해 아무런 동작 없이 넘어가도록 하려면 pass를 사용합니다.
try:
오류가 발생해도 그냥 지나갈 오류를 지닌 코드
except:
pass
나만의 오류 만들기
코딩을 하다보면 내가 짠 프로그램에 맞는 오류가 필요한 경우가 있습니다.
나만의 오류를 직접 만들어서 코드에 적용시켜 봅시다.
# 나만의 오류 직접 만들기
class PasswdError(Exception): # 오류를 만들 때 Exception 클래스를 꼭 상속받아야함
def __str__(self): # 오류 메시지 직접 설정
return '비밀번호가 틀립니다.'
def check_passwd(passwd): # 비밀번호 체크 함수
if passwd != 1234:
raise PasswdError()
print("로그인 성공")
try:
check_passwd(1234) # 로그인 성공
check_passwd(5555) # 오류 발생
except PasswdError as e:
print(e) # 직접 설정한 오류 메시지가 출력됩니다.
오류를 만들기 위해서는 클래스를 만들어야하며 Exception 클래스를 꼭 상속받아야합니다.
여기까지 파이썬의 오류 예외 처리에 대해서 알아보았습니다.
글을 보면서 이해가 안되시거나 궁금하신 점이 생기셨다면 댓글로 남겨주시기바랍니다.
파이썬과 점점 더 친해지시는 여러분들을 위해 더 양질의 내용을 준비할 수 있도록 노력하겠습니다.
감사합니다.
'programming > python' 카테고리의 다른 글
[python 활용하기 #7] 파이썬 워드파일(docx) 업무 자동화 (0) | 2023.03.08 |
---|---|
[python 활용하기 #6] 파이썬 여러 폴더 만들기 (엑셀에서 목록 받음) (0) | 2023.03.07 |
[ python 친해지기 #16 ] 파이썬 모듈 (0) | 2023.02.11 |
[ python 친해지기 #15 ] 파이썬 클래스 2탄 (0) | 2023.02.03 |
[ python 친해지기 #14 ] 파이썬 클래스 1탄 (0) | 2023.02.02 |