코드 안에서 오류가 발생했을 때 멈추지 않고 실행할 수 있게 해주는 메소드
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 구문을 너무 남발하면 에러 발생의 원인을 추적하기가 어려우니 권장하지는 않는다.
# 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와 *이 만나면 괄호가 없어진다.
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는 과자틀을 만드는 것. 과자틀을 이용해서 찍어낸 것이 인스턴스(==객체, 오브젝트)
함수와의 차이 : 변수 지정, 여러가지 함수 실행 등 메소드를 간편하게 실행할 수 있게 함
Class에 init 메소드를 사용하면 인스턴트 생성 시 해당 메소드를 실행한다.
생성자(Constructor): 객체가 생성될 때 '자동으로 호출'되는 메서드를 의미.
class CallName: # init은 인스턴트 생성 시 반드시 처음에 실행된다.
def __init__(self, name, day):
print(f"{name}씨 안녕하세요! 오늘은 {day}일차입니다.")
self.name = name
a = CallName("민수", 3) # 인스턴트 생성
b = CallName("경수", 4) # 인스턴트 생성
>>> 민수씨 안녕하세요! 오늘은 3일차입니다.
경수씨 안녕하세요! 오늘은 4일차입니다.
함수(def)를 단독으로 정의할 때와 달리, class 내부에서 함수를 정의할 때는 첫 번째 인자로 self를 받는다.
찾아본 결과, self를 "인스턴스 자신", "그 시점의 자신", "메소드의 임의의 인수" 라고 부른다고 한다. 또한 "클래스 구성에서 정보를 유지하기 위한 중요한 구성으므로 빼놓을 수 없는 것" 이라고도 한다. 뭔 소린지 아직은 확 와닿지는 않지만, class를 선언함에 있어 관용적으로 사용하는 것 인수으로 이해하고 있다.
다만, init에서는 꼭 첫 번째 인자로 self를 받아야 한다고 한다.