try #구문 안에서 에러가 발생할 경우 except로 넘어감
number = int(number) #'num'을 숫자로 바꾸는 과정에서 에러 발생
print(number)
except: #에러가 발생했을 때 처리
print(f"{number}은(는) 숫자가 아닙니다.")
만약 number에 num대신에 숫자가 들어가면 정상 출력. 문자면 정상출력 안됨.
number = input()
try:
int(number)
10 / number
except ValueError: # int로 변환하는 과정에서 에러가 발생했을 떄
print(f"{number}은(는) 숫자가 아닙니다.")
except ZeroDivisionError: # 0으로 나누면서 에러가 발생했을 때
print("0으로는 나눌수 없습니다.")
except Exception as e: # 위에서 정의하지 않은 에러가 발생했을 때(권장하지 않음)
print(f"예상하지 못한 에러가 발생했습니다. error : {e}"
#except 문법 또한 if / elif와 같이 연달아서 작성할 수 있습니다.
'''에러가 발생했을 때 에러가 발생한 위치를 찾아내기 위해 호출된 함수의 목록을 보여주고 개발자는 stacktrace를 따라가며 에러가 발생한 위치를 추적할 수 있음.
def 집까지_걸어가기():
print(error) # 선언되지 않은 변수를 호출했기 때문에 에러 발생
def 버스_탑승():
집까지_걸어가기()
def 환승():
버스_탑승()
def 지하철_탑승():
환승()
def 퇴근하기():
지하철_탑승()
퇴근하기()
"""
Traceback (most recent call last):
File "sample.py", line 17, in <module>
퇴근하기()
File "sample.py", line 15, in 퇴근하기
지하철_탑승()
File "sample.py", line 12, in 지하철_탑승
환승()
File "sample.py", line 9, in 환승
버스_탑승()
File "sample.py", line 5, in 버스_탑승
집까지_걸어가기()
File "sample.py", line 2, in 집까지_걸어가기
print(error)
NameError: name 'error' is not defined. Did you mean: 'OSError'?
"""
#기본적인 활용
#[list에 담길 값 for 요소 in list]
numbers = [x for x in range(5)] #[0,1,2,3,4]
#조건문은 축약식 뒷부분에 작성, 축약식이 True이면 list에 담김.
even_numbers = [x for x in range(10) if x%2==0] #[0,2,4,6,8]
#아래와 같이 활용 가능
people = [
("lee", 32),
("kim", 23),
("park", 27),
("hong", 29),
("kang", 26)
]
average_age = sum([x[1] for x in people]) / len(people)
#list 축약식의 []를 ()혹은{}로 바꿔주면 tuple, set축약식 사용 가능.
# dictionary 축약식의 구조는 list와 동일하지만, key / value 형태로 지정해야 합니다.
people = [
("lee", 32, "man"),
("kim", 23, "man"),
("park", 27, "woman"),
("hong", 29, "man"),
("kang", 26, "woman")
]
people = {name: {"age": age, "gender": gender} for name, age, gender in people}
print(people)
# result print
"""
{
'lee': {'age': 32,
'gender': 'man'},
'kim': {'age': 23,
'gender': 'man'},
'park': {'age': 27,
'gender': 'woman'},
'hong': {'age': 29,
'gender': 'man'},
'kang': {'age': 26,
'gender': 'woman'}
}
"""
dict명 = {key : value for key,value in dict명}
*이 때 value가 dict가 될 수 도 있음.
dict = {name : {"age":age, "gender":gender} for name, age, gender in people}
파이썬에서 lambda함수는 다른말로 익명함수라고 불림
lambda함수는 주로 map / filter / sort 와 함께사용.
map은 함수와 리스트를 인자로 받아 리스트의 요소들로 함수를 호출함.
string_number=["1","2","3"]
integer_number=list(map(int, string_numbers))
print(integer_numbers) # [1,2,3]
map 함수를 사용하지 않는 경우 아래와 같이 구현
string_numbers = ["1","2","3"]
integer_numbers=[]
for i in string_numbers:
intger_numbers.append(int(i))
print(integer_numbers) #[1,2,3]
list 축약식으로도 동일한 기능 구현 가능
string_numbers = ["1","2","3"]
integer_numbers=[int(x) for x in string_numbers]
print(integer_numbers) #[1,2,3]
map 함수와 lambda 함수를 함께 사용하면 더 다채로운 기능 구현
numbers = [1,2,3,4]
double_numbers = list(map(lambda x:x*2, numbers))
print(double_numbers) #[2,4,6,8]
even_numbers = [x for x in numbers if x%2 == 0]
print(even_numbers) # [2, 4, 6, 8]