2023-03-23 TIL (1)

0v0baek·2023년 3월 23일
0

TIL

목록 보기
10/92

[Python] Try Except 구문+

개념

코드 안에서 오류가 발생했을 때 멈추지 않고 실행할 수 있게 해주는 메소드

실전

value = "happy"

try:
	result = int(value)
    print(result)
except:
	print(f"{value}"는 숫자가 아닙니다.)
>>> happy는 숫자가 아닙니다.

try에서 오류가 발생하면 except의 메소드를 실행해준다.

한걸음 더

에러 종류에 따라 다른 처리를 해주자!!

except ValueError  # int로 변환하는 과정에서 에러가 발생
except ZeroDivisionError # 0으로 나누면서 에러가 발생
except Exception: # 위에서 정의하지 않은 에러가 발생 (if문의 else와 같음)

이런 식으로 오류 메세지에 출력된 오류값을 except 옆에 붙여서 통과시킬 수 있다. 코드 돌리다가 어떤 에러가 발생하면 그 에러종류를 복붙해서 except 옆에 붙여주자!

다만, Exception 구문을 너무 남발하면 에러 발생의 원인을 추적하기가 어려우니 권장하지는 않는다.

[Python] 패킹 언패킹

list의 경우

# add라는 함수를 사용했을 때 받는 변수를 전부 arg안에 집어넣겠다
def duple(*args):
    result = 1
    for i in args:
        result = result * i

    return result

numbers = [1, 2, 3, 4]

# 세 개 모두 같은 값
# numbers에 있는 값을 넣을 때 양쪽에 있는 값을 괄호를 풀어서 넣는 것
print(duple(*numbers)) 
print(duple(1, 2, 3, 4))
print(duple(*[1, 2, 3, 4]))

>>> 24
24
24

list와 *이 만나면 괄호가 없어진다.

dict의 경우

def sample(**kwargs):
    print(kwargs)

sample_dictionary = {
    "a": "1",
    "b": "2",
    "c": "3"
}

# 두 개 모두 동일
sample(**sample_dictionary)
sample(a="1", b="2", c="3")

>>> {'a': '1', 'b': '2', 'c': '3'}
{'a': '1', 'b': '2', 'c': '3'}

💡 list에는 *args, dict에는 **kwargs를 사용한다.
💡 args와 kwargs는 임의의 변수이름으로 변경해도 되지만, 관용적으로 args와 kwargs를 사용한다.

[Python] Class

개념

  1. Python의 class는 과자틀을 만드는 것. 과자틀을 이용해서 찍어낸 것이 인스턴스(==객체, 오브젝트)

  2. 함수와의 차이 : 변수 지정, 여러가지 함수 실행 등 메소드를 간편하게 실행할 수 있게 함

  3. Class에 init 메소드를 사용하면 인스턴트 생성 시 해당 메소드를 실행한다.

  4. 생성자(Constructor): 객체가 생성될 때 '자동으로 호출'되는 메서드를 의미.

예제

class CallName:     # init은 인스턴트 생성 시 반드시 처음에 실행된다.
    def __init__(self, name, day):
        print(f"{name}씨 안녕하세요! 오늘은 {day}일차입니다.")
        self.name = name

a = CallName("민수", 3)  # 인스턴트 생성
b = CallName("경수", 4)  # 인스턴트 생성

>>> 민수씨 안녕하세요! 오늘은 3일차입니다.
경수씨 안녕하세요! 오늘은 4일차입니다.

self의 정체

함수(def)를 단독으로 정의할 때와 달리, class 내부에서 함수를 정의할 때는 첫 번째 인자로 self를 받는다.

참고한 블로그 링크

찾아본 결과, self를 "인스턴스 자신", "그 시점의 자신", "메소드의 임의의 인수" 라고 부른다고 한다. 또한 "클래스 구성에서 정보를 유지하기 위한 중요한 구성으므로 빼놓을 수 없는 것" 이라고도 한다. 뭔 소린지 아직은 확 와닿지는 않지만, class를 선언함에 있어 관용적으로 사용하는 것 인수으로 이해하고 있다.

다만, init에서는 꼭 첫 번째 인자로 self를 받아야 한다고 한다.

부모 class, 자식 class

  • 자식 클래스는 부모 클래스(슈퍼 클래스)로 부터 메소드를 상속받을 수 있다.
  • 자식 클래스와 부모 클래스 양 쪽에 같은 메소드 이름이 있으면, 자식 클래스 매서드가 부모 클래스를 overriding한다.
  • 클래스의 특정 코드를 수정하고 싶을 때 모듈 자체의 코드를 건드는 건 하지 않는 게 좋다. 잘 돌아가던 모듈에 문제가 생길 수 있기 때문. 상속을 이용해서 자식 클래스를 생성한 뒤 overriding 해주는 것이 좋다.
profile
개발 공부 하는 비전공자 새내기. 꾸준히 합시다!

0개의 댓글