본문 바로가기
[챌린지]/[패스트캠퍼스] 파이썬 초격차

패스트캠퍼스 환급챌린지 28일차 미션 (2월 28일) : 파이썬으로 할 수 있는 모든 것 with 47개 프로젝트 초격차 패키지 수강 후기

by 쿠키토끼 2024. 2. 28.

01. 제목

패스트캠퍼스 환급챌린지 28일차 미션 (2월28일) : 
파이썬으로 할 수 있는 모든 것 with 47개 프로젝트 초격차 패키지 Online 수강 후기
 

02. 포스팅 본문 (학습 일기) 가이드

 
1. 학습 인증샷 2장 이상 포함

카메라로 직접 촬영한 수강 인증 사진 (캡쳐X)

 

 

2. 학습 후기 700자 이상 (공백 제외)

오늘은 챕터11의 에러와 예외처리, 에러만들기(예외 만들기로 되어 있는데 강의 스크립트도 그렇고 강사님이 에러만들기라고 함/이 부분마저 에러라니.. 절묘하다?! 사실 예외만들기라고도 하시던데 딱히 상관없는건가싶다.)

에러와 예외처리의 학습목표는 예외처리가 필요한 이유와 try-except 구문과 else, finally 까지 알아보는 것이었다.

먼저 예외처리가 필요한 이유는 파이썬 프로그램이라던가 아니면 어떠한 프로그램들을 만들었을 때 사용자가 개발자가 의도한 대로만 사용할까?에서 시작되는 의문이다.  물론 의도한대로 사용해주면 좋겠지만 아닌 경우도 훨씬 많다는 점에서 출발한다. 숫자를 요구하는 입력에서 문자를 넣는다거나 혹은 빈칸 등의 아무런 입력없이 입력을 보낼 수도 있다.(하라고 하는 대로 하지않는 청개구리 스타일, 나도 이거 진짜 숫자만 되나? 하며 넣었던 그런적이 있었다)이러한 경우의 수들이 발생했을 때 프로그램이 이 부분을 제대로 처리하지 못하면 예외가 발생했다고 판단하고 프로그램이 죽게된다. 그 프로그램이 죽는 것을 방지하기 위해 예외처리를 하게 되는 것이다.

정리하자면 프로그램 실행 중에 발생하는 에러를 미연에 방지하기 위해서 예외 처리를 사용하게 되는 것이다.

try-except 구문과 else, finally 

try:

     예외가 발생할 수 있는 코드

except:

     예외 발생 시 실행할 코드 (예외가 발생한 경우에 실행하는 코드)

사실 예외처리는 try-except 구문만 알면 거의 끝나는 문법이다.

else:

     예외 발생하지 않는 경우 실행할 코드 (자주 쓰이지 않는다고 한다)

finally:

     항상 실행할 코드 (어떤 리소스(자원)를 반환할 때 사용/예외 발생해도 안해도 항상 실행됨)

 

다음은 에러만들기의 학습 목표는 raise 구문 사용법, 예외 계층 구조, 에러만들기 까지였다.

raise 구문 사용법은 raise 예외("에러 메세지")로 에러를 강제로 발생시키기 위해 사용한다.

여기서 에러 메세지는 써줘도 되고 안써줘도 된다.

예시를 들어

raise Exception # 익셉션이 에러를 발생시키는 코드

raise Exception("에러 메세지") # 에러 메세지 넣고 싶으면 이렇게 넣어주면 된다.

다음은 예외 계층 구조로 예외도 계층으로 나뉘어져있다고 한다(에러인데도 그냥 마구잡이가 아니라 체계화 되어있어서 신기한 부분이었다.)

Exception이 모든 내장 예외들을 가지고 있고 이 각 각의 내장 예외들은 또 하위예외들을 가지기도 한다.

만약 예외를 익셉트로 받아들일 때 제로디비젼에러가 발생한다면

except ZeroDivisionError: # 제로디비젼에러 하나만 에러 처리 가능

except ArithmericError: # 아리스메틱에러 하위의 세개의 에러 처리 가능(하위의 하나가 발생하면 이 아리스메틱에러 구문으로 처리된다)

except Exception: # 모든 내장 예외를 받도록 만든다. 그러면 전부 다 익셉션으로 받아서 처리하면 되는 것을 왜 나누냐고 반문한다면 특정 예외를 알 수 있을 때는 상세히 적어줘야 한다고 하는데 아마 특정 에러를 알아야 에러 발생시 고치기가 더 빠르기 때문이 아닐까 싶다. 조금 명확한 궁금증 해결을 위해 챗지피티 답변을 첨부한다.

[나: except Exception: 처럼 exception 자체말고 하위 ZeroDivisionError 이런식의 에러를 지정해주는 이유가 뭐야?]

[챗씨: except Exception:과 except ZeroDivisionError:과 같은 구문을 사용하는 이유는 예외 처리의 세분화와 관련이 있습니다.

except Exception: 사용 시:

Exception은 모든 내장 예외 클래스의 부모 클래스입니다. 따라서 except Exception:을 사용하면 모든 예외를 처리할 수 있습니다. 이는 예외가 어떤 종류인지 신경 쓰지 않고 일괄적으로 처리하려는 경우에 유용할 수 있습니다. 하지만 이런 일반적인 예외 처리는 디버깅이나 예외의 특정 원인을 파악하는 데 어려움을 초래할 수 있습니다.

except ZeroDivisionError: 사용 시:

ZeroDivisionError는 특정한 예외 중 하나로, 숫자를 0으로 나누려고 할 때 발생합니다. 이처럼 특정 예외를 명시적으로 처리함으로써 예외의 종류에 따라 다르게 대응할 수 있습니다. 개발자가 발생할 것으로 예상되는 특정 예외를 명시적으로 처리하면 코드의 가독성이 향상되고 디버깅이 쉬워집니다. 따라서 어떤 예외를 어떻게 처리할지는 상황에 따라 다르며, 일반적인 예외를 처리할지 특정 예외를 처리할지는 코드의 목적과 설계에 따라 결정됩니다. 종종 가능한 구체적인 예외를 처리하는 것이 더 좋은 프로그래밍 관행이 됩니다.]

 

에러만들기는

class 예외(Exception):

     def __init__(self):

         suepr().__init__("에러 메세지")

이런식으로 내장예외에서 내가 쓸 만한 예외가 없고 직접 만들어 쓰고 싶으면 이런식으로 만들 수 있다.

익셉션 클래스를 상속받고 부모 클래스 super 호출, init 함수로 에러 메세지를 넣을 수 있다.

 

아래는 실습을 따라하고 강사님 설명 부분이다.

 

[예외처리]

# 원화를 입력, 환율 입력 -> 달러값으로 출력

won = input("원화 금액을 입력 하세요 >>> ")
dollar = input("환율을 입력 하세요 >>> ")

# print(int(won) / int(dollar))

## 에러메세지 : ValueError: invalid literal for int() with base 10: 'a'
### input값에 int 숫자가 아닌 문자를 썼을 때 나타나는 오류
## 에러메세지 : ZeroDivisionError: division by zero
### input값에 하나가 0을 넣을 경우

try: # 예외가 발생할 수 있는 코드
    print(int(won) / int(dollar))
# except: # 예외가 발생했을 때 실행되는 코드
except ValueError as e: # 발생할 수 있는 에러코드를 직접 지정해준다. / as 별칭 : 별칭 설정
    print("문자열 예외가 발생했습니다.", e) # 뒤에 별칭을 넣어주면 에러메세지도 함께 출력 가능
except ZeroDivisionError: # 발생할 수 있는 에러코드를 직접 지정해준다.
    print("나누기 0은 불가능 합니다.")
else:
    print("예외가 발생하지 않았을 때 실행되는 코드")
finally: # 파일을 열고 나서 파일을 닫아 주는 리소스를 반드시 반환해줘야 하는 코드가 필요할 때 작성필요
    print("예외가 발생하던지, 발생하지 않던지 항상 실행되는 코드")

 

[에러발생시키기]

# raise 구문을 사용해서 에러를 강제로 발생시켜 봅시다.

# 에러 발생! 양수는 입력 불가
try:
    num = int(input("음수를 입력해 주세요 >>> "))
    if num >= 0:
        raise Exception("양수는 입력 불가")
except Exception as e:
    print("에러 발생!", e)


try:
    num = int(input("음수를 입력해 주세요 >>> "))
    if num >= 0:
        raise ValueError("양수는 입력 불가")
except ValueError as e:
    print("에러 발생!", e)

 

[에러만들기]

# 새로운 에러 정의
class PositiveNumberError(Exception): # 에러를 만들 때 익셉션 클래스를 상속받아준다.
    def __init__(self):
        super().__init__("양수는 입력 불가")


try:
    num = int(input("음수를 입력해 주세요 >>> "))
    if num >= 0:
        raise PositiveNumberError
except PositiveNumberError as e:
    print("에러 발생!", e)

 

03. 필수 본문 내용 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
 

04. 필수 해시태그 

#패스트캠퍼스 #직장인자기계발 #직장인공부 #환급챌린지 #패스트캠퍼스후기 #오공완
 

05. 필수 URL 

https://bit.ly/48sS29N

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

[수강 강의 클립] 

[특별 제공] 한 번에 끝내는 파이썬 필수 문법

-Ch 11. 예외 처리

01. 에러와 예외처리

02. 예외만들기

 

[※ 기타사항메모 ※]
{100% 환급챌린지 미션 가이드 참조 : 

https://fastcampus.co.kr/event_online_challenge_2401_mission}

 

커리어 성장을 위한 최고의 실무교육 아카데미 | 패스트캠퍼스

성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.

fastcampus.co.kr