본문 바로가기
TIL(Daily)/Python

Wed/15/Sep/22 Python 심화

by Hawie 2022. 9. 15.

오늘 배운 내용 

try/exception,stackrace,축약식(Comprehension),lamda/map/fitter/sort활용 하기

 

오늘은 4가지를 배우게 됬다.

 

첫번째

try / exception을 활용한 에러 처리

 

python에서는 try / except 문법을 사용해 에러가 발생했을 때 처리를 해줄수 있습니다.


number = "num"

try: # try 구문 안에서 에러가 발생할 경우 except로 넘어감
    number = int(number) # "num"을 숫자로 바꾸는 과정에서 에러 발생
except: # 에러가 발생했을 때 처리
    print(f"{number}은(는) 숫자가 아닙니다.")


에러 종류에 따라 다른 로직 처리


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의 이해

 

stacktrace란?

stacktrace는 python 뿐만이 아닌 대부분의 개발 언어에서 사용되는 개념입니다.

에러가 발생했을 때 에러가 발생 한 위치를 찾아내기 위해 호출 된 함수의 목록을 보여주고
개발자는 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'?
"""


축약식(Comprehension)

 

축약식이란?

 

축약식은 긴 코드를 간략하게 줄일수 있다는 장점이 있지만, 남용할 경우 가독성이
떨어지고 추후 코드 관리가 힘들수 있기 때문에 필요할 때만 사용하는 것을 권장합니다.

list, set, tuple, dict 자료형이 축약식을 지원합니다.

기본적인 구조는 똑같으며, 어떤 괄호 기호를 사용하는지 / 어떤 형태로 사용하는지에
따라 저장되는 자료형이 달라집니다.

축약식은 모두 동일한 구조를 가지고 있기 때문에 한 가지 자료형에 익숙해지면 다른
자료형에도 적용해서 사용할 수 있습니다.

 

ist / tuple / set 축약식 활용법

 


# 기본적인 활용 방법
# [list에 담길 값 for 요소 in 리스트]
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)
print(average_age) # 27.4

#list 축약식의 []를 ()혹은 {}로 바꿔주면 tuple, set 축약식을 사용하실수 있습니다.

 


dictionary 축약식 활용법

 


 

# 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'}
 }
"""


lambda / map / filter / sort 활용하기

 

lambda 함수란?

 

python에서 lambda 함수는 다른 말로 익명 함수(anonymous function)라고도 불립니다.

lambda 함수는 주로 map / filter / sort 함수와 함께 사용됩니다.

 

map 함수 활용해보기


# map은 함수와 리스트를 인자로 받아 리스트의 요소들로 함수를 호출해줍니다.
string_numbers = ["1", "2", "3"]
integer_numbers = list(map(int, string_numbers))
print(integer_numbers) # [1, 2, 3]

# map 함수를 사용하지 않는 경우 아래와 같이 구현할 수 있습니다.
string_numbers = ["1", "2", "3"]
integer_numbers = []

for i in string_numbers:
    integer_numbers.append(int(i))

print(integer_numbers) # [1, 2, 3]

# list 축약식으로도 동일한 기능을 구현할 수 있습니다.
# map과 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]


filter 함수 활용해보기

 


# filter 함수는 map과 유사한 구조를 가지고 있으며, 조건이 참인 경우 저장합니다.
numbers = [1, 2, 3, 4, 5, 6, 7, 8]

even_numbers = list(filter(lambda x: x%2 == 0, numbers))
print(even_numbers) # [2, 4, 6, 8]

# filter 함수 또한 list 축약식으로 동일한 기능을 구현할 수 있습니다.
numbers = [1, 2, 3, 4, 5, 6, 7, 8]

even_numbers = [x for x in numbers if x%2 == 0]
print(even_numbers) # [2, 4, 6, 8]

 


sort 함수 활용해보기


# sort 함수를 사용하면 list를 순서대로 정렬할 수 있습니다.
numbers = [5, 3, 2, 4, 6, 1]
numbers.sort()
print(numbers) # [1, 2, 3, 4, 5, 6]

# sort와 lambda 함수를 같이 사용하면 복잡한 구조의 list도 정렬할 수 있습니다.
people = [
    ("lee", 32),
    ("kim", 23),
    ("park", 27),
    ("hong", 29),
    ("kang", 26)
]

# 나이 순으로 정렬하기
people.sort(key=lambda x: x[1])
print(people)

# result print
"""
[
    ("kim", 23),
    ("kang", 26),
    ("park", 27),
    ("hong", 29),
    ("lee", 32)
]
"""


오늘은 크게 4개 가지를 배우게 되었다.

먼저

try / exception을 활용한 에러 처리

이거 문법은 앞으로 장고에서 도 많이 사용 되는 문법이라고 해서 중점적으로 읽어보고

과제 할 때도 써보았다.

아직 처음이라 전부 이해 한건 아니지만,추후 많이 사용하게 되면 충분히 사용 할수 있어 보인다.

 

두번째로 

stacktrace의 이해 는

파이썬 뿐 아니라 다른 개발 언어에서도 사용되는 개념으로 

필수 인것으로 보인다 앞으로 개발자가 되면 다른 언어도 배우고 사용 하게 될 텐데,

이번 기회에 알아 두고 사용하면서 익숙해지면 될것으로 보인다.

 

세번째로 

축약식(Comprehension)은

말그대로 긴 코드를 가략하게 줄일 수있다.

하지만 너무 남용 하게 되면 가독성이 떨어지게 된다 하니 너무 남용 안하도록

하는게 좋다고했다.

하지만 잘 이용 하면 너무 좋은 스킬 같으니 잘 배워두 도록 해야겠다.

축약식 활용 법으로 

list / tuple / set 축약식 활용법

dictionary 축약식 활용법

들이 있다.

 

마지막으로 

 

lambda / map / filter / sort 활용하기등이있다

 

다른 모든 것 들도 마찬가지지만

위에 네가지 함수들은 개념 알고 사용 하면서 익숙해지는 방법이 제일 좋은방법이기에,

많은 코드를 짜서 연습 하도록 해야겠다.

 

 

 

'TIL(Daily) > Python' 카테고리의 다른 글

Tue/13/Sep/22-python 심화(Clalss,Mutable,Immutable)  (0) 2022.09.13
Wed/07/Sep/22 TIL  (1) 2022.09.08
Tue/06/Sep/22-TLI  (0) 2022.09.06
Mon/05/Sep/22(Python 언어의 이해)  (1) 2022.09.05
클래스  (0) 2022.09.02

댓글