파이썬 예외 처리(Exception) 코드의 안정성을 높이는 방법
천둥상어
·2023. 12. 14. 00:10
"코딩을 하다 보면 예상치 못한 에러가 발생하곤 합니다.
예를 들어 불러오는 파일이 존재하지 않거나, 데이타 타입이 불일치 하거나, 네트워크 지연에 따른 오류 등 말이죠.
이러한 에러 발생시 어떠한 에러인지 확인하고 예외 처리를 해줘야 사용자에게 좋은 경험을 줄 수 있습니다."
기본적인 예외 처리 구문
아래 코드에서는 의도적으로 ZeroDivisionError를 발생 시킵니다.
ZeroDivisionError는 파이썬에서 0으로 나누려고 할 때 발생하는 내장 예외 중 하나 입니다.
즉, 어떤 수를 0으로 나누는 연산을 시도할 때 발생하는 에러 입니다.
수학적으로 유효하지 않기 때문이죠.
result = 10 / 0 # ZeroDivisionError 발생
이제 이 코드에서 예외 처리를 추가해 보겠습니다.
아래 코드는 try문 블록에서 ZeroDivisionError 가 발생하면 어떠한 에러인지 출력하게 예외 처리 합니다.
try:
# 예외가 발생할 수 있는 코드 블록
result = 10 / 0
except ZeroDivisionError as e:
# ZeroDivisionEroor가 발생했을 때 실행되는 코드 블록
print(f"Error: {e}")
그리고 ZeroDivisionError 처럼 예상 할 수 있는 에러가 아닌 경우의 예외도 추가해 봅니다.
정의 되지 않은 a 라는 변수에 10을 더해서 result 에 대입해 주었습니다.
결과는 "Unexpected Error: name 'a' is not defined"가 출력이 됩니다.
try:
# 예외가 발생할 수 있는 코드 블록
result = 10 + a
except ZeroDivisionError as e:
# ZeroDivisonError가 발생했을 때 실행되는 코드 블록
print(f"Error: {e}")
except Exception as e:
print(f"Unexpected Error: {e}") #Unexpected Error: name 'a' is not defined
지금까지는 try문 코드에서 문제 발생시 예외 처리 하는것만 알아보았습니다.
이제 예외가 발생하지 않는 경우도 처리를 해야 겠죠?
'else' 문은 예외가 발생하지 않았을 때 실행되는 코드 블록 입니다.
try문내 result에 정상적인 값을 대입하고 실행시키면 "No Error~"가 출력되는 것을 확인할 수 있습니다.
try:
# 예외가 발생할 수 있는 코드 블록
result = 10
except ZeroDivisionError as e:
print(f"Error: {e}")
except Exception as e:
print(f"Unexpected Error: {e}")
else :
print("No Error~")
#No Error~
마지막으로 예외 처리 발생 여부를 떠나 항상 실행되는 코드 구문을 보겠습니다.
finally 문은 예외 처리 상관 없이 항상 실행되는 코드 구문입니다.
"No Error~"와 "Finally"가 순차적으로 출력 됩니다.
try:
# 예외가 발생할 수 있는 코드 블록
result = 10
except ZeroDivisionError as e:
print(f"Error: {e}")
except Exception as e:
print(f"Unexpected Error: {e}")
else :
print("No Error~")
finally:
print("Finally")
#No Error~
#Finally
예외 처리 구문 정리
- try : 예외가 발생할 수 있는 코드를 포함하는 블록.
- except :예외가 발생했을 때 실행되는 블록으로 범용적으로 처리 하거나 특정 예외 타입을 지정할 수 있음.
- else : 예외가 발생하지 않았을 때 실행되는 블록
- finally : 예외 발생 여부와 상관엇이 항상 실행되는 블록
사용자 정의 예외
예외는 개발자가 직접 정의해서 사용할 수도 있습니다.
class CustomError(Exception):
def __init__(self, message="Custom error msg"):
self.message = message
super().__init__(self.message)
try:
raise CustomError("Error Type : 0")
except CustomError as e:
print(e)
위 코드는 Exception을 상속 받는 사용자 정의 예외 클래스를 만들어서 에러 메세지를 보여주는 코드 입니다.
try문에서 rasie로 의도적으로 예외를 발생시켰고, 클래스 생성시 에러 메세지를 넘깁니다.
결과는 "Error Type : 0" 가 출력 됩니다.
마치며
예외 처리는 코드의 신뢰성을 높이고 예기치 못한 문제에 대처 할 수 있습니다.
예외 발생시 앱이 다운되거나 꺼지는 것보다는 어떠한 에러인지 팝업으로라도 보여주는게 좋습니다.
'프로그래밍 > Python 기초' 카테고리의 다른 글
파이썬 클래스(Class) (0) | 2023.12.20 |
---|---|
파이썬 딕셔너리(Dictionary) (0) | 2023.12.12 |
파이썬 설치와 VSC 인터프리터 설정 (2) | 2023.12.09 |
파이썬 리스트(List) #2 길이 확인, 요소 순회 및 처리 (1) | 2023.12.04 |
파이썬 리스트(List) #1 생성, 접근, 추가, 삭제 (1) | 2023.12.03 |